题意:
中文题不解释。
代码:
#include<iostream> #include<queue> using namespace std ; int n,m,q,flag[1001][1001],num[1001][1001],dir[4][2]={{-1, 0}, {0, 1}, {1, 0}, {0, -1}} ; char map[1001][1001] ; bool bfs(int se,int sy,int ex,int ey) { int i,x1,y1,x2,y2; memset(num,-1,sizeof(num)); memset(flag,0,sizeof(flag)); queue<int>Q ; Q.push(se); Q.push(sy); while(Q.empty()==0) { x1=Q.front(); Q.pop() ; y1=Q.front(); Q.pop() ; if(x1==ex && y1==ey) { return true ; } for(i=0;i<4;i++) { x2=x1+dir[i][0]; y2=y1+dir[i][1]; if( x2>=0 && x2<n && y2>=0 && y2<m && num[x1][y1]+1<=2 && flag[x2][y2]==0) { if(x2==ex && y2==ey) { return true ; } while( x2>=0 && x2<n && y2>=0 && y2<m && map[x2][y2]=='0' && flag[x2][y2]==0) { num[x2][y2]=num[x1][y1]+1; flag[x2][y2]=1; Q.push(x2); Q.push(y2); x2+=dir[i][0]; y2+=dir[i][1]; if(x2==ex && y2==ey) { return true; } } } } } return false; } int main() { int qx1,qy1,qx2,qy2,i,j; while(scanf("%d %d",&n,&m),m||m) { for(i=0;i<n;i++) { getchar(); for(j=0;j<m;j++) { scanf(j==0 ? "%c" : " %c",&map[i][j]); } } scanf("%d",&q); for(i=0;i<q;i++) { scanf("%d %d %d %d",&qx1,&qy1,&qx2,&qy2); if(map[qx1-1][qy1-1]==map[qx2-1][qy2-1] && map[qx1-1][qy1-1]!='0' && map[qx2-1][qy2-1]!='0') { puts( bfs(qx1-1,qy1-1,qx2-1,qy2-1) ? "YES" : "NO" ); } else { puts("NO"); } } } }
作者:pxz8858 发表于2012-12-25 20:25:54 原文链接
阅读:0 评论:0 查看评论