pascal一个迷宫问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 01:18:59
题目在这里

由于不知道棋盘大小范围,先暂定100*100为最大容量。(这个可以再改的)
就是wfs。
代码如下,自己写的,加分哦!

const d:array[1..8,1..2]of -1..1=((0,1),(0,-1),(1,0),(-1,0),(1,1),(1,-1),(-1,1),(-1,-1));
var
b:array[1..10000]of record x,y,f:integer;end;
ans:array[1..10000]of integer;
n,m,op,cl,s1,s2,t1,t2:integer;
flag,a:array[1..100,1..100]of 0..1;

procedure prog;
var i,j,nx,ny,top:integer;ch:char;
begin
{Input}
for i:=1 to n do
begin
for j:=1 to m do begin read(ch);a[i][j]:=ord(ch='1');end;
readln;
end;
readln(s1,s2);readln(t1,t2);if (s1=0)and(s2=0)then begin s1:=1;s2:=1;end;
{WFS}
flag[s1,s2]:=1;op:=1;cl:=1;b[op].x:=s1;b[op].y:=s2;
repeat
for i:=1 to 8 do
begin
nx:=b[op].x+d[i,1];ny:=b[op].y+d[i,2];//next_x,next_y
if (nx in[1..n])and(ny in[1..m])and(a[nx,ny]=0)and(flag[nx,ny]=0)then
begin
inc(cl);b[cl].f:=o