您当前的位置: 首页 > 

MangataTS

暂无认证

  • 0浏览

    0关注

    423博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Dungeon Master 地下城大师(BFS进阶)

MangataTS 发布时间:2020-01-23 11:45:00 ,浏览量:0

题目链接:2251 -- Dungeon Master

知道你看不懂题(手动滑稽):友情链接。

题意:找到从S到E的最少步数的路径,输出该步数,不过有意思的是这个类似迷宫问题不是二维的,是一个三维迷宫,其实三维迷宫和二维没多大差别,只是时间复杂度更多一点,搜索的方向更多一点,初次接触可能会被难住。

代码:

#include
#include
#include
#include
using namespace std;
struct node//定义三维坐标结构体 
{
    int z;
    int x;
    int y;
};
int dx[6]={0,-1,0,1,0,0},dy[6]={-1,0,1,0,0,0},dz[6]={0,0,0,0,-1,1};//六个方向的搜索 
bool vis[31][31][31];//vis数组记录是否走过,剪枝去重。 
char mp[31][31][31];
int d[31][31][31];//记录步数的三位数组。
int l,r,c,gx,gy,gz,sx,sy,sz;//g则是开始的坐标,S则是终止的坐标。
int bfs()
{
    queueq;
    q.push({gz,gx,gy});
    vis[gz][gx][gy]=1;
    d[gz][gx][gy]=0;
    while(q.size())
    {
        node p=q.front();
        q.pop();
        if(p.x==sx&&p.y==sy&&p.z==sz)
        break;
        for(int i=0;i=0&&nx=0&&nz=0&&ny>l>>r>>c)
    {
        memset(d,0,sizeof d);//初始化 
        memset(vis,0,sizeof vis);//初始化 
        if(l==0&&r==0&&c==0)
        break;
        for(int i=0;i            
关注
打赏
1665836431
查看更多评论
0.0406s