电子老鼠闯迷宫

来源:互联网 发布:python判断是否是str 编辑:程序博客网 时间:2024/05/14 02:59

如下图12×12方格图,找出一条自入口(2,9)到出口(11,8)的最短路径。 









var

 i,n,m,j,max,ans,l:longint;
 a,s:array[0..1000,0..1000] of longint;
 f:array[0..1000] of longint;
 w:array[1..2,1..2] of longint;
 fx:array[1..4,1..2] of longint;
procedure print(n:longint);
 begin
  if n=0 then exit;
  inc(ans);
  print(f[n]);
  if n<>l then write('(',s[n,1],',',s[n,2],')->')
          else writeln('(',s[n,1],',',s[n,2],')');
 end;


procedure bfs;
var
 head,tail,k,i,q1,q2:longint;
begin
 head:=0; tail:=1; s[1,1]:=w[1,1]; s[1,2]:=w[1,2]; f[1]:=0;
 repeat
  head:=head+1;
  for i:=1 to 4 do
   begin
    q1:=s[head,1]+fx[i,1];
    q2:=s[head,2]+fx[i,2];
    if (q1<=max) and (q2<=max) and (a[q1,q2]=0) and (q1>=1) and (q2>=1) then
                   begin
                    tail:=tail+1;
                    f[tail]:=head;
                    s[tail,1]:=s[head,1]+fx[i,1];
                    s[tail,2]:=s[head,2]+fx[i,2];
                    a[s[tail,1],s[tail,2]]:=1;
                    if (s[tail,1]=w[2,1]) and (s[tail,2]=w[2,2]) then
                     begin
                      l:=tail;
                      print(tail);
                      tail:=0;
                     end;
                   end;
   end;
 until head>=tail;


end;
begin
 fx[1,1]:=1;
 fx[1,2]:=0;
 fx[2,1]:=-1;
 fx[2,2]:=0;
 fx[3,1]:=0;
 fx[3,2]:=1;
 fx[4,1]:=0;
 fx[4,2]:=-1;
 readln(max);
 for i:=1 to 2 do
  for j:=1 to 2 do
  read(w[i,j]);
 readln;
 for i:=1 to max do
 begin
  for j:=1 to max do
   read(a[i,j]);
  readln;
 end;
 for i:=1 to max do
 begin
  a[i,0]:=1;
  a[0,i]:=1;
 end;
 a[0,0]:=1;
 bfs;
 write(ans);
end.

0 0