pascal编程问题,求大神们解答一下!!

有一天,你和你的朋友到商店里去购物,商店里琳琅满目,想要的物品应有尽有!心血来潮的你想送这些物品作为礼物给小亮,但你想在朋友到达出口之前先到达出口,并且给小亮一个巨大的惊... 有一天,你和你的朋友到商店里去购物,商店里琳琅满目,想要的物品应有尽有!心血来潮的你想送这些物品作为礼物给小亮,但你想在朋友到达出口之前先到达出口,并且给小亮一个巨大的惊喜。
【问题描述】
我们可以将商店想象成一个N×M的矩阵,(1,1)为入口,(N,M)为出口。现在你和你的朋友一同从入口进入,你们只能向下或向右走,商店里也不免有一些不能通过的地方。你每个单位可以移动X个格,你朋友每个单位可以移动Y个格。你一开始就去买礼物(买礼物是瞬间完成,不耗时),而你的朋友就沿着最短路朝出口走去。一开始你们站在入口处(即第1行,第1列的位置)。
Input

第一行,N,M,X,Y,四个整数,意义如题目描述。
接下来N行,M个字符以及行为换行符,“.”表示可以通行;“*”表示不能通行;“#”表示这里有1块石头。
Output

一行,一个整数,表示小明在小亮之前到达山洞出口,最多能捡到多少块石头。
Sample Input Copy
3 4 2 1
.#**
*.#*
**#.

Sample Output Copy
3

HINT

【数据范围】
30%,n<10,m<10
50%,n<100,m<100
100%,n<1000,m<1000,每个数据都有一条或以上的线路通往出口。

这道题应该是回溯吧,但是真不知咋做,求高手指点指点!
这里打错了: 一行,一个整数,表示你在小亮之前到达商店出口,最多能拿多少个礼物?

所有打成石头的地方视为礼物。
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏60(财富值+成长值)
匿名用户
2015-05-14
展开全部
type
charray=array[1..100,1..100] of char;
var
ch:charray;
n,m,x,y,i,j,max:integer;
maxs:string;
f:text;

procedure next(p,q,num:integer;s:string);{行、列、礼物数、路径串}
begin
if (p=n)and(q=m) then 
begin if num>max then begin max:=num; maxs:=s; end; end
else begin
if (p<n) then 
case ch[p+1,q] of
'.':next(p+1,q,num,s+'D');
'#':next(p+1,q,num+1,s+'D'); 
end; 
if (q<m) then
case ch[p,q+1] of
'.':next(p,q+1,num,s+'R');
'#':next(p,q+1,num+1,s+'R'); 
end;
end;
end;

begin
assign(f,'送礼.in'); reset(f);
readln(f,n,m,x,y);
for i:=1 to n do begin for j:=1 to m do read(f,ch[i,j]); readln(f); end;
close(f);
for i:=1 to n do begin for j:=1 to m do write(ch[i,j]); writeln; end;
max:=0;
maxs:='';
next(1,1,0,'');
writeln(max:4,'  ',maxs);
end.
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-05-14
展开全部
这应该是数塔吧?
追问
管他是啥,到底该怎么做啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式