#include<stdio.h> #include<string.h> #include<queue> #define N 20 using namespace std; int dis[4][2]={1,0,-1,0,0,1,0,-1}; int n,m,t; struct node { int x,y,time,f; }; char ma[2][N][N]; int visit[2][N][N]; int judge(int x,int y,int f) { if(x>=1&&x<=n&&y>=1&&y<=m&&ma[f][x][y]!='*'&&!visit[f][x][y]) return 1; return 0; } int bfs() { queue<node>q; node cur,next; int i; memset(visit,0,sizeof(visit));//刚开始忘了初始化wa了n次 cur.x=1;cur.y=1;cur.time=0;cur.f=0; visit[0][1][1]=1; q.push(cur); while(!q.empty()) { cur=q.front(); q.pop(); if(cur.time>t) continue; if(cur.time<=t&&ma[cur.f][cur.x][cur.y]=='P') return 1; for(i=0;i<4;i++) { int xx=next.x=cur.x+dis[i][0]; int yy=next.y=cur.y+dis[i][1]; next.time=cur.time+1; next.f=cur.f; if(judge(xx,yy,cur.f)) { visit[cur.f][xx][yy]=1; if(ma[cur.f][xx][yy]=='#'&&(ma[(cur.f+1)%2][xx][yy]=='*'||ma[(cur.f+1)%2][xx][yy]=='#'))continue;//如果是‘#’和‘#’的话就无限循环了 if(ma[cur.f][xx][yy]=='#'&&!visit[(cur.f+1)%2][xx][yy]) { next.f=(cur.f+1)%2; visit[next.f][xx][yy]=1; } q.push(next); } } } return 0; } int main() { int i,tt; scanf("%d",&tt); while(tt--) { scanf("%d%d%d",&n,&m,&t); for(i=1;i<=n;i++) scanf("%s",ma[0][i]+1); for(i=1;i<=n;i++) scanf("%s",ma[1][i]+1); if(bfs()) printf("YES\n"); else printf("NO\n"); } return 0; }
hdu 2102 bfs
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
下一篇:hdu 4079简单贪心
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
hdu 2102 A计划(bfs)
Problem Description可怜的公主在一次次被魔王掳走一次次被骑士们救回来之
C++ bfs sed #include Java -
HDU 2102 A计划(BFS)
传送门如题所示,一
#include i++ ios -
HDU 2102 A计划(简单3维BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102
c语言 算法 编程 bfs #include -
HDU 2102 A计划
Problem Description,公主
hdu 广搜 #include i++ 测试数据 -
HDU 2102 A计划(三维BFS)
这题太欢乐了......虽然wa了几次,但是想到骑士在两幅图的传送门中传来传去就觉得这骑士太坑了
#include i++ ios -
HDU 2102 A计划 (三维的迷宫BFS)
...
#include i++ ios