way:array[1..4,1..2] of longint=((-1,0),(1,0),(0,-1),(0,1));
var
i,j,k,x,y,docx,docy,insx,insy,n,m,s,t,nowx,nowy,top,tail:longint;
a:array[0..1001,0..1001] of longint;
v:array[0..1001,0..1001] of boolean;
queue:array[0..1000001,1..2] of longint;
ch:char;
f:boolean;
begin
fillchar(a,sizeof(a),0);
fillchar(v,sizeof(v),true);
readln(n);
for i:=1 to n do
begin
for j:=1 to n do
begin
read(ch);
if ch='1' then v[i,j]:=false;
end;
readln;
end;
readln(docx,docy);
readln(insx,insy);
top:=0; tail:=1;
v[insx,insy]:=false;
queue[1,1]:=insx; queue[1,2]:=insy;
f:=false;
repeat
inc(top);
nowx:=queue[top,1]; nowy:=queue[top,2];
for i:=1 to 4 do
begin
x:=nowx+way[i,1]; y:=nowy+way[i,2];
if (x in [1..n])and(y in [1..n])and v[x,y] then
begin
inc(tail);
queue[tail,1]:=x; queue[tail,2]:=y;
a[x,y]:=a[nowx,nowy]+1;
v[x,y]:=false;
end;
if (x=docx)and(y=docy) then
begin
writeln(a[x,y]);
f:=true; break;
end;
end;
until f;
end.
过了2个点 其余的点 普通保护错误