点击打开链接
3 4 1 2 3 4 0 0 0 0 4 3 2 1 4 1 1 3 4 1 1 2 4 1 1 3 3 2 1 2 4 3 4 0 1 4 3 0 2 4 1 0 0 0 0 2 1 1 2 4 1 3 2 3 0 0
YES NO NO NO NO YES
#include<stdio.h> #include<string.h> int n,m,map[1005][1005],sign,visit[1005][1005],x1,y1,x2,y2; int s[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; void DFS(int a,int b,int t,int d) { int i,x,y; if(t>2) return ; if(a==x2&&b==y2) { sign=1; return ; } if(map[a][b]!=0&&(a!=x1||b!=y1)) return ; if(t==2&&a!=x2&&b!=y2) return ; for(i=0;i<4;i++) { x=a+s[i][0]; y=b+s[i][1]; if(x>0&&x<=n&&y>0&&y<=m&&visit[x][y]==0) if(map[x][y]==0||map[x][y]==map[x2][y2]) { visit[x][y]=1; if(a==x1&&b==y1) d=i; if(i==d) DFS(x,y,t,i); else DFS(x,y,t+1,i); visit[x][y]=0; if(sign==1) return ; } } } int main() { int i,j,q; while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0) break; memset(visit,0,sizeof(visit)); for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%d",&map[i][j]); scanf("%d",&q); while(q--) { sign=0; scanf("%d %d %d %d",&x1,&y1,&x2,&y2); if(map[x1][y1]!=map[x2][y2]||x1==x2&&y1==y2) { printf("NO\n"); continue; } if(map[x1][y1]==map[x2][y2]&&map[x1][y1]==0) { printf("NO\n"); continue; } visit[x1][y1]=1; DFS(x1,y1,0,0); visit[x1][y1]=0; if(sign) printf("YES\n"); else printf("NO\n"); } } return 0; }