poj2251(bfs)

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

#include 
#include 
#include 
#include 
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()
{
    queueque;
    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=0&&ny=0&&nz

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

你可能感兴趣的:(poj2251(bfs))