82 lines
1.4 KiB
ObjectPascal

program save;
const
maxn=1000;
dx:array[1..4]of longint=(1,0,-1,0);
dy:array[1..4]of longint=(0,1,0,-1);
type
xy=record
dis,y,x:longint;
end;
var
n:longint;
g:array[0..maxn+1,0..maxn+1]of boolean;
dl:array[1..maxn*maxn]of xy;
sx,sy,gx,gy:longint;
procedure init;
var
i,j:longint;
ch:char;
begin
assign(input,'save.in');reset(input);
fillchar(g,sizeof(g),false);
readln(n);
for i:=1 to n do
begin
for j:=1 to n do
begin
read(ch);
g[i,j]:=(ch='0');
end;
readln;
end;
readln(sy,sx,gy,gx);
close(input);
end;
procedure bfs;
var
dir,head,tail,i,j,ti,tj:longint;
begin
head:=1;tail:=1;
dl[head].y:=sy;dl[head].x:=sx;
dl[head].dis:=0;
g[sy,sx]:=false;
repeat
i:=dl[head].y;j:=dl[head].x;
for
dir:=1 to 4 do
begin
ti:=i+dy[dir];tj:=j+dx[dir];
if g[ti,tj] then
begin
inc(tail);
dl[tail].y:=ti;dl[tail].x:=tj;
dl[tail].dis:=dl[head].dis+1;
g[ti,tj]:=false;
if (ti=gy)and(tj=gx) then
begin
assign(output,'save.out');rewrite(output);
writeln(dl[tail].dis);
close(output);
halt;
end;
end;
end;
inc(head);
until head>tail;
end;
begin
init;
bfs;
end.