HDU 2102 A计划 (三维的迷宫BFS)
来源:互联网 发布:编发教学软件 编辑:程序博客网 时间:2024/05/23 17:56
题目链接:传送门
题意:
三维的一个迷宫,起点在第一层的S(0,0,0)处,问能否在规定的时间内走到第二层的P
处。'*'代表不能走,'.'代表可以走,'#'代表传送门,这里有一个trick,走到传送门的时
候必须要传送。之前没有注意到WA了很多遍。
而且在初始的时候可以对地图进行一下处理,('*','#'),('#','*'),('#','#')这样的肯定
是不可以走的,所以可以把他们都变成'*'
代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int maxn = 50;char mp[2][maxn][maxn];int vis[2][maxn][maxn];int dx[4]= {1,-1,0,0};int dy[4]= {0,0,-1,1};int n,m,limit;struct nod { int x,y,z; int step; nod() {} nod(int _x,int _y,int _z):x(_x),y(_y),z(_z) {}};bool check(nod tmp){ if(vis[tmp.z][tmp.x][tmp.y]) return false; if(tmp.x>=0&&tmp.x<n&&tmp.y>=0&&tmp.y<m&&mp[tmp.z][tmp.x][tmp.y]!='*') return true; return false;}bool bfs() { nod st=nod(0,0,0); vis[0][0][0]=1; st.step=0; queue<nod> Q; Q.push(st); while(!Q.empty()) { nod tmp = Q.front(); //cout<<tmp.z<<" "<<tmp.x<<" "<<tmp.y<<" "<<tmp.step<<endl; Q.pop(); if(mp[tmp.z][tmp.x][tmp.y]=='P'&&tmp.step<=limit) { return true; } else if(mp[tmp.z][tmp.x][tmp.y]=='P') { return false; } for(int i=0; i<4&&mp[tmp.z][tmp.x][tmp.y]!='#'; i++) { nod top; top.x=tmp.x+dx[i],top.y=tmp.y+dy[i],top.z=tmp.z,top.step=tmp.step+1; if(check(top)){ Q.push(top); vis[top.z][top.x][top.y]=1; } } if(mp[tmp.z][tmp.x][tmp.y]=='#'){ tmp.z^=1; Q.push(tmp); vis[tmp.z][tmp.x][tmp.y]=1; } } return false;}int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&m,&limit); for(int i=0; i<n; i++) scanf("%s",mp[0][i]); for(int i=0; i<n; i++) scanf("%s",mp[1][i]); for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { if(mp[0][i][j]=='#'&&mp[1][i][j]=='#') mp[0][i][j]=mp[1][i][j]='*'; if(mp[0][i][j]=='#'&&mp[1][i][j]=='*') mp[0][i][j]=mp[1][i][j]='*'; if(mp[0][i][j]=='*'&&mp[1][i][j]=='#') mp[0][i][j]=mp[1][i][j]='*'; } } memset(vis,0,sizeof(vis)); if(bfs()) puts("YES"); else puts("NO"); } return 0;}
0 0
- 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
- 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 BFS A计划
- linux下eclipse交叉开发环境搭建
- 浅析PL/SQL过程化语言编程要点
- Linux原始套接字实现分析
- wp7的web使用
- codeforces #306 E 550E E. Brackets in Implications(构造)
- HDU 2102 A计划 (三维的迷宫BFS)
- python 基本类型list、tuple、dict学习
- spring IOC依赖注入
- 1--FreeRTOS操作系统介绍
- oracle系统表查询
- Xcode7 UI自动化测试详解 带demo UITests
- uva 10765 Doves and Bombs(割顶)
- 黑马程序员_集合2
- C#结构体与类区别