HDU 1728 逃离迷宫
2014-07-30 15:40
239 查看
//从一点多写到现在..中间 还参考 了写过的代码,但是还是错了..不知道为什么..有空再写;
#include<iostream> #include<queue> #define maxn 105 using namespace std; char a[maxn][maxn]; bool visit[maxn][maxn]; int dir[4][2]={{0,-1},{1,0},{0,1},{-1,0}}; int x1,y1,x2,y2,t,m,n,turn; struct node { int x,y,dir,t; }p,q; bool judge(int i,int j) { return i>0 && i<=m && j>0 && j<=n && a[i][j]=='.'; } void bfs() { queue<node> game; memset(visit,false,sizeof(visit)); q.x=y1,q.y=x1;q.t=-1;q.dir=-1; game.push(q); visit[q.x][q.y]=true; while(!game.empty()) { p=game.front(); game.pop(); for(int i=0;i<4;i++) { q.x=p.x+dir[i][0];q.y=p.y+dir[i][1];q.t=p.t+1; q.dir=i%2; if(q.t<= turn &&q.x==y2 && q.y==x2) { printf("yes\n"); return; } while(judge(q.x,q.y)&&q.t<=turn&&q.dir!=p.dir) { if(!visit[q.x][q.y]&&q.t<=turn-1) game.push(q),visit[q.x][q.y]=true; q.x+=dir[i][0]; q.y+=dir[i][1]; if(q.x==y2 && q.y==x2 && q.t<= turn) { printf("yes\n"); return ; } } } } printf("no\n"); } int main() { //freopen("1728.txt","r",stdin); int i,j; scanf("%d",&t); while(t--) { scanf("%d%d",&m,&n); for(i=1;i<=m;i++) { getchar(); for(j=1;j<=n;j++) scanf("%c",&a[i][j]); } scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&turn); if(x1==x2 &&y1==y2 || a[y1][x1]=='*') printf("no\n"); else bfs(); } return 0; }
相关文章推荐
- HDU 1728 - 逃离迷宫
- HDU 1728 逃离迷宫(BFS)
- HDU 1728 - 逃离迷宫
- hdu 1728 逃离迷宫
- hdu 1728 逃离迷宫(BFS)
- hdu 1728 逃离迷宫 bfs记转向
- HDU-1728 逃离迷宫 解题报告(张浩盛伦)
- HDU 1728 逃离迷宫
- HDU 1728逃离迷宫(DFS或者BFS)
- HDOJ/HDU 1728 逃离迷宫 DFS 深度优先搜素
- hdu 1728 逃离迷宫
- HDU 1728 逃离迷宫(BFS)
- hdu 1728 逃离迷宫 [ dfs ]
- HDU-1728 逃离迷宫
- HDU1728--逃离迷宫
- hdu 1728 逃离迷宫 bfs记步数
- hdu 1728 逃离迷宫(dFS+优先队列)
- HDU 1728 逃离迷宫 (BFS)
- hdu 1728 逃离迷宫(BFS)
- HDU 1728 逃离迷宫