hdu 1728 逃离迷宫(广搜)
看题目请点这里
题意:
中问题不解释。
代码:
#include<cstring>#include<queue>#include<iostream> using namespace std ;struct Node {int x,y,s;};int m,n,k,x1,y1,x2,y2,i;int flag[101][101],dir[4][2]={0,-1,0,1,-1,0,1,0};char map[101][101];int bfs() { Node q1,q2; queue<Node>Q; q2.x=x1;q2.y=y1;q2.s=-1; //起点不算,所以从-1开始Q.push(q2); while(Q.empty()==0) { q1=Q.front(); Q.pop() ; for(i=0;i<4;i++) { q2.x=q1.x+dir[i][0] ; q2.y=q1.y+dir[i][1] ; q2.s=q1.s+1; while( q2.x>0 && q2.x<=n && q2.y>0 && q2.y<=m && map[q2.y][q2.x]=='.' && q2.s<=k) { if(q2.x==x2 && q2.y==y2) { return 1; }if(flag[q2.y][q2.x]==0){Q.push(q2); flag[q2.y][q2.x]=1;}q2.x+=dir[i][0] ; //按一个方向搜到底q2.y+=dir[i][1] ; } } } return 0; } int main(){ int T; scanf("%d",&T); while(T--) { scanf("%d %d",&m,&n); for(i=1;i<=m;i++) { scanf("%s",&map[i][1]); } scanf("%d %d %d %d %d",&k,&x1,&y1,&x2,&y2);if(x1==x2 && y1==y2){puts("yes");continue;}memset(flag,0,sizeof(flag));flag[y1][x1]=1;puts(bfs() ? "yes" : "no"); } return 0;}