#include<iostream>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<map>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<time.h>
#include<math.h>
#define eps 1e-9
#define N 1005
#define P system("pause")
using namespace std;
int n,m,flag;
int a[N][N],vis[N][N];
int dx[]={1,-1,0,0},dy[]={0,0,1,-1};
int sx,sy,nx,ny;
void dfs(int x,int y,int dir,int count)
{
// cout<<x<<y<<count<<endl;
if(flag) return;
if(count>2) return;
if(x<0 || x>=n || y<0 || y>=m) return;
// cout<<x<<y<<count<<endl;
if(x==nx && y==ny) {flag=1;return ;}
if(a[x][y]) return ;
if(vis[x][y]) return ;
vis[x][y]=1;
if(dir == 1)
{
dfs(x-1,y,1,count);
dfs(x+1,y,2,count+1);
dfs(x,y-1,3,count+1);
dfs(x,y+1,4,count+1);
}
else if(dir == 2)
{
dfs(x-1,y,1,count+1);
dfs(x+1,y,2,count) ;
dfs(x,y-1,3,count+1);
dfs(x,y+1,4,count+1);
}
else if(dir == 3)
{
dfs(x-1,y,1,count+1);
dfs(x+1,y,2,count+1);
dfs(x,y-1,3,count);
dfs(x,y+1,4,count+1);
}
else if(dir == 4)
{
dfs(x-1,y,1,count+1);
dfs(x+1,y,2,count+1);
dfs(x,y-1,3,count+1);
dfs(x,y+1,4,count);
}
vis[x][y]=0;
}
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);cc
int i,j,t;
while(scanf("%d%d",&n,&m))
{
if(!m&&!n) break;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d",&sx,&sy,&nx,&ny);
sx--;sy--;
nx--;
ny--;
if(a[sx][sy]!=a[nx][ny] || (!a[sx][sy]&&!a[nx][ny]))
{
printf("NO\n");
continue;
}
memset(vis,0,sizeof(vis));
vis[sx][sy]=1;
flag=0;
dfs(sx-1,sy,1,0);
dfs(sx+1,sy,2,0);
dfs(sx,sy-1,3,0);
dfs(sx,sy+1,4,0);
if(flag) printf("YES\n");
else printf("NO\n");
}
}
// P;
return 0;
}
hdu1175(教你记录搜索时方向的变化次数)
最新推荐文章于 2021-04-07 18:00:55 发布