【poj 2251】 Dungeon Master 题意&题解&代码(C++)
2016-03-22 22:04
681 查看
题目链接:
http://poj.org/problem?id=2251
题意:
题目大意:这题是一个三维的迷宫题目,其中用’.’表示空地,’#’表示障碍物,’S’表示起点,’E’表示终点,求从起点到终点的最小移动次数,解法和二维的类似,只是在行动时除了东南西北移动外还多了上下。
题解:
恶心的bfs搜最短路,从二位平面拓展到三维立体,其实也只需要把原本的二位方向数组改为三维即可。。。
代码:
迷之wa
http://poj.org/problem?id=2251
题意:
题目大意:这题是一个三维的迷宫题目,其中用’.’表示空地,’#’表示障碍物,’S’表示起点,’E’表示终点,求从起点到终点的最小移动次数,解法和二维的类似,只是在行动时除了东南西北移动外还多了上下。
题解:
恶心的bfs搜最短路,从二位平面拓展到三维立体,其实也只需要把原本的二位方向数组改为三维即可。。。
代码:
迷之wa
nclude<iostream> #include<algorithm> #include<stdio.h> #include<string.h> #include<queue> using namespace std; char c[35]; int flag,opx,opy,oph,edx,edy,edh,n,m,h,f[35][35][35],dis[35][35][35]; struct node{ int x;int y;int z; }; int de[3][6]={{1,-1,0, 0,0, 0}, {0, 0,1,-1,0, 0}, {0, 0,0, 0,1,-1}}; queue<node>q; void bfs() { node st; flag=0; st.x=opx;st.y=opy;st.z=oph; q.push(st); dis[oph][opx][opy]=0; while(!q.empty() && flag==0) { node now=q.front();q.pop(); int nox=now.x; int noy=now.y; int noz=now.z; for (int i=0;i<6;i++) { int nex=nox+de[0][i]; int ney=noy+de[1][i]; int nez=noz+de[2][i]; if (nex>=1 && nex<=m && ney>=1 && ney<=n && nez>=1 && nez<=h) { if (dis[nez][nex][ney]==-1&&f[nez][nex][ney]==0) { node ne; ne.x=nex;ne.y=ney;ne.z=nez; dis[nez][nex][ney]=dis[noz][nox][noy]+1; q.push(ne); } } if (edx==nex && edy==ney && edh==nez) { flag=1;return ; } } } } int main() { while(scanf("%d%d%d",&h,&n,&m)) { if (n==0&&m==0&&h==0) return 0; memset(dis,-1,sizeof(dis)); while(!q.empty()) q.pop(); for (int k=1;k<=h;k++) for (int i=1;i<=n;i++) { scanf("%s",c); for (int j=1;j<=m;j++) { if (c[j-1]=='S') opx=j,opy=i,oph=k; else if (c[j-1]=='#') f[k][j][i]=1; else if (c[j-1]=='E') edx=j,edy=i,edh=k; } } bfs(); if (flag) printf("Escaped in %d minute(s).\n",dis[edh][edx][edy]); else printf("Trapped!\n"); } }
相关文章推荐
- 【poj 1426】Find The Multiple 题意&题解&代码(C++)
- C/C++知识点整理(2)
- C++11 写个线程池
- C++智能指针简单剖析
- C++ map 的用法(转载)
- 我犯了一个低级的C++的逻辑错误
- 查找与排序之冒泡排序篇(C语言实现)
- 代码规范_2:防御编码_c/c++
- C语言指针 直接寻址与间接寻址详解
- C++中实现字符串函数split
- Problem G: C语言习题 医生值班
- C++ 学习之路(10):继承与派生
- C++ 将数据导入到CSV,txt文档中
- C++中的堆和栈的完全解析
- 蓝桥杯 2016c/c++A组 题解
- c++第2次作业
- C++ 链表
- superviseddescent (SDM C++11实现)环境配置
- C++第二次作业
- 结对项目— 词频统计(语言C++)