poj 2251 三维地图bfs
Posted chichina
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 2251 三维地图bfs相关的知识,希望对你有一定的参考价值。
三维地图
poj 2251
#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
char map[35][35][35];
int l,r,c;
bool book[35][35][35];
// 定义 东西南北和上下
struct dis{
int x,y,z;
int step;
dis(int x,int y,int z,int step):x(x),y(y),z(z),step(step){
}
};
int dx[6]={1,0,0,-1,0,0};
int dy[6]={0,1,-1,0,0,0};
int dz[6]={0,0,0,0,1,-1};
int bfs(int x,int y,int z){
queue<dis> st;
st.push(dis(x,y,z,0));
while(!st.empty()){
dis cur=st.front();
st.pop();
if(map[cur.x][cur.y][cur.z]==‘E‘){
return cur.step;
}
for(int i=0;i<6;i++){// 加入队列
int x=cur.x + dx[i];
int y=cur.y + dy[i];
int z=cur.z + dz[i];
if(x<l&&y<r&&z<c&&x>=0&&y>=0&&z>=0&&map[x][y][z]!=‘#‘&&!book[x][y][z]){
book[x][y][z]=1;
st.push(dis(x,y,z,cur.step+1));
}
}
}
return -1;
}
int main(){
freopen("p2251.txt","r",stdin);
while(scanf("%d%d%d",&l,&r,&c)&&l){
for(int j=0;j<l;j++){
for(int i=0;i<r;i++){
scanf("%s",map[j][i]);
}
scanf("
");
}
memset(book,0,sizeof(book));
for(int i=0;i<l;i++)
for(int j=0;j<r;j++)
for(int k=0;k<c;k++)
if(map[i][j][k]==‘S‘){
int d=bfs(i,j,k);
if(d==-1){
cout<<"Trapped!
";
}else{
printf("Escaped in %d minute(s).
",d);
}
}
}
return 0;
}
以上是关于poj 2251 三维地图bfs的主要内容,如果未能解决你的问题,请参考以下文章
POJ - 2251 Dungeon Master(三维BFS)