hdu 2102 bfs
来源:互联网 发布:大数据公司的经营范围 编辑:程序博客网 时间:2024/05/17 04:31
#include<stdio.h>#include<string.h>#include<queue>#define N 20using 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;}
0 0
- HDU 2102 双层bfs
- hdu 2102 BFS
- hdu 2102 bfs
- HDU 2102 BFS
- HDU 2102 BFS
- HDU 2102 BFS
- [BFS] HDU 2102
- HDU 2102 A计划 BFS
- hdu 2102 A计划 BFS
- HDU 2102 A计划(BFS)
- hdu 2102 A计划 (bfs)
- Hdu 2102 A计划 [Bfs]
- HDU 2102 A计划 BFS
- HDU 2102--A计划【BFS】
- HDU 2102 A计划 BFS
- hdu 2102 A计划(bfs)
- hdu 2102 A计划 BFS
- hdu 2102 A计划(bfs)
- Hanlder Looper Message MessageQueue
- 设计模式的分类
- Unity常用函数
- 编程语言,一路走来
- 翻译翻的想吐
- hdu 2102 bfs
- 02_android入门_实现短信/彩信发送的功能
- 别人的博客
- Handler
- 算法与数据结构第五章树上机练习
- Node中的事件轮询(摘自了不起的node.js)
- android 百度地图定位代码参考
- 翻译04
- 给定数量的币值,如25分,10分,5分,1分,编写计算n分的有多少种表示方法