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那个语句退出之后没有减步数
在程序中有一点很可取,将走过的路当墙来看待进行优化
因为如果走回走过的点只相当于增加步数,所以将判断走过和墙·路数组合并为一个