裸的搜索。练练手。
program migong;
var map:array[0..101,0..101]of longint;
v:array[0..101,0..101]of boolean;
t,n,ha,la,hb,lb:longint;
mx:array[1..4]of longint=(-1,0,1,0);
my:array[1..4]of longint=(0,-1,0,1);
function dfs(x,y:longint):boolean;
var i:longint;
begin
if (x=hb)and(y=lb) then exit(true);
v[x,y]:=true;
for i:=1 to 4 do
if (not v[x+mx[i],y+my[i]])and(map[x+mx[i],y+my[i]]=0) then
if dfs(x+mx[i],y+my[i]) then exit(true);
exit(false);
end;
procedure init;
var i,j,k:longint;
ch:char;
f:boolean;
begin
read(t);
for i:=1 to t do
begin
readln(n);
for j:=0 to n+1 do
for k:=0 to n+1 do
begin
map[j,k]:=1;
v[j,k]:=false;
end;
f:=false;
for j:=1 to n do
begin
for k:=1 to n do
begin
read(ch);
if ch='.' then map[j,k]:=0;
v[j,k]:=false;
end;
readln;
end;
readln(ha,la,hb,lb);
inc(ha);inc(la);inc(hb);inc(lb);
if (map[ha,la]=1)or(map[hb,lb]=1) then
begin writeln('NO');continue;end;
if dfs(ha,la) then begin
writeln('YES');
f:=true;
end;
if not f then writeln('NO');
end;
end;
begin
init;
end.
评论