const dx:array[0..4]of longint=(100,0,0,1,-1);
dy:Array[0..4]of longint=(100,1,-1,0,0);
var a,mark:array[0..1000,0..1000]of integer;
i,j,xx,yy,n,k:longint;
b:boolean;
procedure work(x,y,l:longint);
begin
for k:=1 to 4 do
if (dx[k]+dx[l]<>0)and(dy[k]+dy[l]<>0)or(l=0)then
begin
xx:=x+dx[k]; yy:=y+dy[k];
if(x+dx[k]>=1)and(x+dx[k]<=n)and(y+dy[k]>=1)and(y+dy[k]<=n)and(a[x+dx[k],y+dy[k]]=0)then
begin
if mark[xx,yy]=1 then
begin
b:=true;
end
else
begin
mark[xx,yy]:=1;
work(xx,yy,k);
end;
end
else
mark[x+dx[k],y+dy[k]]:=0;
end;
end;
begin
readln(n);
b:=false;
for i:=1 to n do
for j:=1 to n do
read(a[i,j]);
for i:=1 to n do
for j:=1 to n do
if (a[i,j]=0)and(mark[i,j]=0) then work(i,j,0);
if b=true then writeln('Y') else writeln('N');
end.
方法二:bug
begin
writeln('Y');
end.