f,p:array[1..1000,1..1000]of boolean;
xx:array[1..4]of integer=(0,0,1,-1);
yy:array[1..4]of integer=(-1,1,0,0);
x1,x2,y1,y2,n,i,head,tail,k:longint;
boo:char;
begin
fillchar(f,sizeof(f),false);
fillchar(p,sizeof(p),true);
readln(n);
for i:=1 to n do
begin
for k:=1 to n do
begin
read(boo);
if boo='0' then f[i,k]:=true;
end;
readln;
end;
read(x1,y1);
read(x2,y2);
a[1]:=x1; b[1]:=y1;
p[x1,y1]:=false;
head:=0;
tail:=1;
d[1]:=0;
repeat
inc(head);
for i:=1 to 4 do
if (f[a[head]+xx[i],b[head]+yy[i]])and(p[a[head]+xx[i],b[head]+yy[i]])
then
begin
inc(tail);
a[tail]:=a[head]+xx[i];
b[tail]:=b[head]+yy[i];
d[tail]:=d[head]+1;
p[a[head]+xx[i],b[head]+yy[i]]:=false;
if (a[tail]=x2)and(b[tail]=y2)
then begin writeln(d[tail]);
halt;
end;
end;
until head=tail;
end.
BFS那里会爆内存啊??求指点啊!!
f,p:array[1..8000,1..8000]of boolean;
开这么大后第一组超时 后面的还不够
肿么搞啊!!
