您的位置:首页 > 其它

POJ - 2251 bfs [kuangbin带你飞]专题一

2017-02-13 21:38 411 查看
     立体bfs,共有六个方向:

const int dx[] = {0,0,1,-1,0,0};
const int dy[] = {1,-1,0,0,0,0};
const int dz[] = {0,0,0,0,1,-1};

AC代码
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;

const int maxn = 32;
char G[maxn][maxn][maxn];
int d[maxn][maxn][maxn];

const int dx[] = {0,0,1,-1,0,0};
const int dy[] = {1,-1,0,0,0,0};
const int dz[] = {0,0,0,0,1,-1};

int l, r, c;

struct node{
int x, y, z;
node(){
}
node(int x, int y, int z):x(x), y(y), z(z){
}
};

int bfs(int z, int x, int y) {
memset(d, -1, sizeof(d));
queue<node>q;
q.push(node(x, y, z));
d[z][x][y] = 0;
while(!q.empty()){
node p =q.front();
q.pop();
x = p.x, y = p.y, z = p.z;
if(G[z][x][y] == 'E') return d[z][x][y];
for(int i = 0; i < 6; ++i){
int px = x + dx[i], py = y + dy[i], pz = z + dz[i];
if(px < 0 || py < 0 || pz < 0 || px >= r || py >= c || pz >= l) continue;
if(G[pz][px][py] == '#' || d[pz][px][py] != -1) continue;
d[pz][px][py] = d[z][x][y] + 1;
q.push(node(px, py, pz));
}
}
return -1;
}

int main(){
while(scanf("%d%d%d", &l, &r, &c) == 3 && l){
for(int i = 0; i < l; ++i){
for(int j = 0; j < r; ++j) scanf("%s", G[i][j]);
}
int ans;
int x, y, z;
for(int i = 0; i < l; ++i)
for(int j = 0; j < r; ++j)
for(int k = 0; k < c; ++k) {
if(G[i][j][k] == 'S') {
z = i, x = j, y = k;
i = l, j = r, k = c;
}
}
ans = bfs(z, x, y);
if(ans == -1) printf("Trapped!\n");
else printf("Escaped in %d minute(s).\n", ans);
}
return 0;
}

如有不当之处欢迎指出!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: