poj2251(bfs)

作者: 42fighting | 来源:发表于2018-01-24 16:54 被阅读0次

kuangbin带你飞搜索专题:poj2251
这是一道三维bfs裸题..二维的最短路径相信大家都很熟悉,此题从二维拓展到三维...用队列模拟bfs,从而解出此题。vis是记录是否经过某点,dis负责记录到某点的最短路径。

#include <iostream>
#include <cstdio>
#include <string.h>
#include <queue>
using namespace std;
int m, n, h;
const int maxn=33;
char s[maxn][maxn][maxn];
int vis[maxn][maxn][maxn];
int dis[maxn][maxn][maxn];
struct node{
  int x, y, z;
  node(int xx, int yy, int zz)
  {
        x=xx;
        y=yy;
        z=zz;
  }
};
int cm[6]={1,0,-1,0,0,0};
int cn[6]={0,1,0,-1,0,0};
int ch[6]={0,0,0,0,1,-1};
node S=node(0, 0, 0), E=node(0, 0, 0);


int bfs()
{
    queue<node>que;
    que.push(S);
    vis[S.x][S.y][S.z]=1;
    while(!que.empty())
    {
        node no=que.front();
        que.pop();
        int x=no.x, y=no.y, z=no.z;
        for(int i=0; i<6; i++)
        {
            int nx=x+cm[i], ny=y+cn[i], nz=z+ch[i];
            if(nx==E.x&&ny==E.y&&nz==E.z)
            {
                return dis[x][y][z]+1;
            }
            if(nx>=0&&nx<m&&ny>=0&&ny<n&&nz>=0&&nz<h&&s[nx][ny][nz]=='.'&&!vis[nx][ny][nz])
            {
                vis[nx][ny][nz]=1;
                que.push(node(nx, ny, nz));
                dis[nx][ny][nz]=dis[x][y][z]+1;
            }
        }
    }
    return -1;
}



int main(void)
{
    while(scanf("%d%d%d", &m, &n, &h)&&m&&n&&h)
    {
        memset(dis, 0, sizeof(dis));
        memset(vis, 0, sizeof(vis));
        for(int i=0; i<m; i++)
        {
            for(int j=0; j<n; j++)
            {
                scanf("%s", s[i][j]);
            }
        }
        for(int i=0; i<m; i++)
        {
            for(int j=0; j<n; j++)
            {
                for(int k=0; k<h; k++)
                {
                    if(s[i][j][k]=='S')
                    S=node(i, j, k);
                    if(s[i][j][k]=='E')
                    E=node(i, j, k);
                }
            }
        }

        int res=bfs();
        if(res==-1)printf("Trapped!\n");
        else printf("Escaped in %d minute(s).\n", res);
    }
    return 0;
}

(ps:好久没敲bfs了,裸敲完ac感觉挺有感觉的~)
over

相关文章

  • poj2251(bfs)

    kuangbin带你飞搜索专题:poj2251这是一道三维bfs裸题..二维的最短路径相信大家都很熟悉,此题从二维...

  • 走迷宫(BFS例题)

    BFS例题---走迷宫 BFS对应数据结构queue BFS算法时间复杂度O(n^2) BFS算法不走走过的点 的...

  • 什么时候用BFS,什么时候用DFS

    参考什么时候用dfs,什么时候用bfs 参考什么时候用DFS,什么时候用BFS? BFS的缺点适用情况 BFS的一...

  • Binary Tree(2)

    BFS vs DFS for Binary Tree What are BFS and DFS for Binar...

  • BFS/DFS python模板与实现

    BFS BFS在搜索完第k层的节点之前,是不会搜索第k+1层的节点的。 BFS原理 BFS所用的是队列。把每个还没...

  • Chapter12—搜索—广搜

    1. 题目列表 POJ3126(BFS) POJ3087(BFS) POJ3414(BFS+路径打印) 2. 广搜...

  • BFS及其应用

    内容概要: BFS类的实现 BFS求解连通分量 BFS求解无向图点对之间的一条最短路径 BFS判定无环图和二分图 ...

  • 8.19 - hard - 64

    317 . Shortest Distance from All Buildings 典型的BFS的题目,BFS可...

  • H - 8 HDU - 1495

    BFS

  • POJ2251——Dungeon Master

    Problem You are trapped in a 3D dungeon and need to find ...

网友评论

    本文标题:poj2251(bfs)

    本文链接:https://www.haomeiwen.com/subject/beiuaxtx.html