hdu 1240 Asteroids!

本文介绍了一种使用BFS算法解决三维迷宫问题的方法,重点在于理解三维空间中节点的遍历顺序和标记机制。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1240


BFS水题,注意x,y,z的顺序。

#include<iostream>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{
    int x,y,z,time;
};
char s[10];
char map[15][15][15];
int vis[15][15][15];
int n,a,b,c,d,e,f,flag;
int dx[]={1,-1,0,0,0,0};
int dy[]={0,0,1,-1,0,0};
int dz[]={0,0,0,0,1,-1};
void bfs()
{
    int ans;
    node vw,vn;
    queue<node>fuck;
    vn.x=a;
    vn.y=b;
    vn.z=c;
    vn.time=0;
    fuck.push(vn);
    while(!fuck.empty())
    {
        vn=fuck.front();
        ans=vn.time;
        fuck.pop();
        if(vn.x==d&&vn.y==e&&vn.z==f)
        {
            flag=1;
            break;
        }
        else
        {
            int p;
            for(p=0;p<6;p++)
            {
                vw.x=vn.x+dx[p];
                vw.y=vn.y+dy[p];
                vw.z=vn.z+dz[p];
                if(vw.x>=0&&vw.y>=0&&vw.z>=0&&vw.x<n&&vw.y<n&&vw.z<n&&map[vw.x][vw.y][vw.z]=='O'&&!vis[vw.x][vw.y][vw.z])
                {
                    vis[vw.x][vw.y][vw.z]=1;
                    vw.time=vn.time+1;
                    fuck.push(vw);
                }
            }
        }
    }
    if(flag)
    cout<<n<<" "<<ans<<endl;
    else
    cout<<"NO ROUTE"<<endl;
}
int main()
{
    while(cin>>s)
    {
        int i,j,k;
        cin>>n;
        for(i=0;i<n;i++)
         for(j=0;j<n;j++)
          for(k=0;k<n;k++)
            cin>>map[k][j][i];
        cin>>a>>b>>c>>d>>e>>f;
        memset(vis,0,sizeof(vis));
        cin>>s;
        flag=0;
        bfs();
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值