码迷,mamicode.com
首页 > 其他好文 > 详细

HDU1240-题目意思详解( 三维BFS)

时间:2014-08-15 17:57:49      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:bfs   hdu1240   c++   三维bfs   

题目大意:先输入START N 表示这个立方体的层数是N,每一层为一个NxN的正方形。。其实就是一个NxNxN的正方体,输入时一层一层的输入。

输入完立方体后,输入起点和终点的坐标。

输出是 先输出 N 再输出最短路径的步数。如果走不到终点,输出NO ROUTE。

坑点:它输入的起点和终点坐标不与我们输入的立方体对应。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <string>
#define M 11
using namespace std;
struct node{
    int x,y,z;
    int t;
};
int dir[6][3]={{0,0,1},{0,1,0},{1,0,0},{0,0,-1},{0,-1,0},{-1,0,0}};
int N;
int sa,sb,sc,ea,eb,ec;
char maze[M][M][M];
bool judge(int x,int y,int z){
    if(x<0||x>=N||y<0||y>=N||z<0||z>=N){
            return true;
    }
    if(maze[x][y][z]=='X')  {
            return true;
    }
    return 0;
}
int bfs(){
    queue<node> myque;
    node now,next;
    now.x=sa;
    now.y=sb;
    now.z=sc;
    now.t=0;
    myque.push(now);
    if(now.x==eb&&now.y==ec&&now.z==ea) {
        return now.t;
    }
    while(!myque.empty())
    {
        now=myque.front();
        myque.pop();
        for(int i=0;i<6;i++)
        {
            next.x=now.x+dir[i][0];
            next.y=now.y+dir[i][1];
            next.z=now.z+dir[i][2];
            next.t=now.t+1;
            if(judge(next.x,next.y,next.z)) {
                continue;
            }
            if(next.x==ea&&next.y==eb&&next.z==ec) {
                return next.t;
            }
            maze[next.x][next.y][next.z]='X';
            myque.push(next);
        }
    }
    return -1;
}
int main(){
   string s;
   while(cin>>s,scanf("%d",&N)!=EOF){
       for(int i=0;i<N;i++)
        {
            for(int j=0;j<N;j++)
            {
                for(int k=0;k<N;k++)
                {
                    cin>>maze[i][j][k];
                }
            }
       }
       cin>>sb>>sc>>sa>>eb>>ec>>ea>>s;
       int anw;
       anw=bfs();
       if(anw!=-1)      printf("%d %d\n",N,anw);
       else if(anw==-1) printf("NO ROUTE\n");
   }
}


HDU1240-题目意思详解( 三维BFS),布布扣,bubuko.com

HDU1240-题目意思详解( 三维BFS)

标签:bfs   hdu1240   c++   三维bfs   

原文地址:http://blog.csdn.net/enterpine/article/details/38587105

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!