啥也不说了。
#include"stdio.h"
#include"math.h"#include"queue"
#include"string.h"
using namespace std;
#define N 1005
int n,m;
int move[][2]={{1,0},{-1,0},{0,1},{0,-1}};
bool vis[N][N];
int map[N][N];
struct node
{
int x,y;
}s,e;
int init()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(map[i][j]!=0)
vis[i][j]=true;
else vis[i][j]=false;
}
}
vis[e.x][e.y]=false;
return 0;
}
bool dfs(int i,int j,int d,int k)//x,y,方向,转折次数
{
if(k>2) return false;
if(vis[e.x][e.y]) return true;
if(k==2&&i-e.x!=0&&j-e.y!=0)
return false;
for(int kk=0;kk<4;kk++)
{
int x=i+move[kk][0];
int y=j+move[kk][1];
if(x<n&&x>=0&&y<m&&y>=0&&!vis[x][y])
{
vis[x][y]=true;
if(vis[e.x][e.y]) return true;
bool flag;
if(kk==d)
flag=dfs(x,y,kk,k);
else
flag=dfs(x,y,kk,k+1);
if(flag) return true;
else vis[x][y]=false;
}
}
return false;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
if(n==m&&m==0) break;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
scanf("%d",&map[i][j]);
int q;scanf("%d",&q);
while(q--)
{
scanf("%d%d%d%d",&s.x,&s.y,&e.x,&e.y);
s.x-=1;s.y-=1;e.x-=1;e.y-=1;
init();
if(map[e.x][e.y]!=map[s.x][s.y]||
map[e.x][e.y]==0||
map[s.x][s.y]==0||
(s.x==e.x&&s.y==e.y))
{
printf("NO\n");
continue;
}
bool flag=dfs(s.x,s.y,-1,-1);
printf(flag?"YES\n":"NO\n");
}
}
return 0;
}