#include<stdio.h>
#include<string.h>
int to[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int mark[1005][1005];
int map[1005][1005];
int m;
int n;
int t;
struct
{
int times;
int x,y;
}queue[1000005],st,ed,now,next;
void bfs()
{
memset(mark,0,sizeof(mark));
int head,tail,i;
tail=head=0;
st.times=-1;
queue[tail++]=st;
while(head<tail)
{
now=queue[head++];
for(i=0;i<4;i++)
{
next.x=now.x+to[i][0];
next.y=now.y+to[i][1];
next.times=now.times+1;
while((next.x>=0&&next.y>=0&&next.x<m&&next.y<n&&map[next.x][next.y]==0)||(next.x==ed.x&&next.y==ed.y))
{
if(mark[next.x][next.y]==0)
{
mark[next.x][next.y]=1;
queue[tail++]=next;
if(next.x==ed.x&&next.y==ed.y&&next.times<=2)
{
puts("YES");
return ;
}
}
next.x+=to[i][0];
next.y+=to[i][1];
next.times=now.times+1;
}
}
}
puts("NO");
}
int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
if(m==0&&n==0)
{
break;
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&map[i][j]);
}
}
scanf("%d",&t);
for(int i=0;i<t;i++)
{
scanf("%d%d%d%d",&st.x,&st.y,&ed.x,&ed.y);
st.x--;
st.y--;
ed.x--;
ed.y--;
if(st.x==ed.x&&st.y==ed.y)
{
puts("NO");
continue;
}
if(map[st.x][st.y]==0||map[ed.x][ed.y]==0||map[st.x][st.y]!=map[ed.x][ed.y])
{
puts("NO");
continue;
}
bfs();
}
}
}
Hdu1175 - 连连看 - 广度优先搜索
最新推荐文章于 2020-04-18 00:29:58 发布