讨论 / 交了11次总算过了……
Aule 2010-11-03 05:28:00
点我顶贴 收藏 删除
program r195;

var i,j,k,k2,m,n,x,y,sx,sy,temp:longint;

e:array [1..2000,1..2000] of boolean;

procedure ss(x2,y2:longint);

begin

inc(k2);

if (x2=sx)and(y2=sy) then begin

if k2-1<k then k := k2-1;

dec(k2);

exit;

end;

if k2<=k then begin

e[x2,y2] := false;

if (x<n)and(e[x2+1,y2]) then ss(x2+1,y2);

if (x>1)and(e[x2-1,y2]) then ss(x2-1,y2);

if (y<m)and(e[x2,y2+1]) then ss(x2,y2+1);

if (y>1)and(e[x2,y2-1]) then ss(x2,y2-1);

e[x2,y2] := true;

end;

dec(k2);

end;

begin

fillchar(e,sizeof(e),false);

readln(n,m);

for i := 1 to n do begin

for j := 1 to m do begin

read(temp);

if temp =0 then e[i,j] := true;

end;

readln;

end;

readln(x,y);

readln(sx,sy);

k := maxlongint;

k2 := 0;

ss(x,y);

if k=maxlongint then writeln(’No Answer!’)

else writeln(k);

end.

是因为在exit那个语句退出之后没有减步数

在程序中有一点很可取,将走过的路当墙来看待进行优化

因为如果走回走过的点只相当于增加步数,所以将判断走过和墙·路数组合并为一个

#1 我是白痴@2010-11-03 05:28:00
回复 删除
莫非此牛用的是深搜???
查看更多回复
提交回复