POJ 2251 Dungeon Master (bfs)
2015-07-26 23:07
513 查看
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> using namespace std; char mat[50][50][50]; int vis[50][50][50]; int op[6][3]={0,-1,0, 0,1,0, 1,0,0, -1,0,0 ,0,0,1, 0,0,-1 }; int ok; int z,n,m; struct Node{ int x,y,z; int rt; }; Node now[200000]; bool isok(Node node) { if(node.z<1||node.z>z||node.x<1||node.x>n||node.y<0||node.y>=m) return false; if(vis[node.z][node.x][node.y]==1||mat[node.z][node.x][node.y]=='#') return false; return true; } void bfs(int si,int sj,int sk) //z x y { int front,rear; int x,y,z; front=0,rear=1; z=now[0].z=si; x=now[0].x=sj; y=now[0].y=sk; now[0].rt=0; vis[z][x][y]=1; while(front<rear) { // Node temp; z=now[front].z; x=now[front].x; y=now[front].y; if(mat[z][x][y]=='E') { ok=1; printf("Escaped in %d minute(s).\n",now[front].rt); } for(int i=0;i<6;i++) { z=now[rear].z=now[front].z+op[i][0]; x=now[rear].x=now[front].x+op[i][1]; y=now[rear].y=now[front].y+op[i][2]; now[rear].rt=now[front].rt+1; if(isok(now[rear])) { vis[z][x][y]=1; rear++; } } front++; } } int main() { int i,j,k; int si,sj,sk; while(scanf("%d%d%d",&z,&n,&m)!=EOF) { if(z==0&&n==0&&m==0) break; ok=0; memset(vis,0,sizeof(vis)); for(i=1;i<=z;i++) { for(j=1;j<=n;j++) { scanf("%s",mat[i][j]); for(k=0;k<m;k++) { if(mat[i][j][k]=='S') { si=i;sj=j;sk=k; } } } } bfs(si,sj,sk); if(ok==0) printf("Trapped!\n"); } return 0; }
相关文章推荐
- Java面向对象之继承
- 每天一个linux命令(11):nl命令
- JQuery日历控件
- Unique path ii
- [leetcode-11]container with most water(C)
- POJ 4045 - Power Station(树形DP)
- 硬件篇——2_crazyflie2.0原理图之STM32F405
- Android学习进阶路线导航线路
- 大数据系列修炼-Scala课程02
- Collection & set
- 汇编学习(二)
- java4Android(17)(18) 多线程两种实现方法
- 【LeetCode】237 & 203 - Delete Node in a Linked List & Remove Linked List Elements
- 第一百一十五天 how can I 坚持
- Scala的react、loop代码编程
- 图像的镜像变换
- 理想倍频器/分频器对相噪/杂散的影响
- Android访问网络(可以正常使用)
- 指向指针的指针的一种用法
- OPENCV下SIFT算法使用方法笔记