首页 > 其他分享 >POJ 2251 Dungeon Master(三维BFS)

POJ 2251 Dungeon Master(三维BFS)

时间:2023-05-26 15:01:51浏览次数:33  
标签:Dungeon til int 50 next BFS Master && que


题目看起来很厉害,实际上看懂了并不难,开一个三维的数组,这里需要注意的是第一维是高度,然后就是简单的BFS了,还有不同就是三维的时候有六个方向可以走,在前后左右的基础上多了一个向上和向下的走法,还有一个问题就是多个输入样例要注意每次都要初始化,我做的时候就因为这个WA了好几次,最后在学姐的帮助下才改出来,最后,附代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char mp[50][50][50];
int step[50][50][50],vis[50][50][50];
int mv[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
int l,r,c,sx,sy,sz,ex,ey,ez;
struct node
{
    int z,x,y;
};
void bfs()
{
    memset(vis,0,sizeof(vis));
    node que[100010];
    int frt = 0,til = 0;
    que[til].x = sx;
    que[til].y = sy;
    que[til++].z = sz;
    step[sz][sx][sy] = 0;
    vis[sz][sx][sy] = 1;
    while(frt != til)
    {
        node p = que[frt++];
        int next_x,next_y,next_z;
        for(int i = 0;i < 6; i++)
        {
            next_x = p.x + mv[i][0];
            next_y = p.y + mv[i][1];
            next_z = p.z + mv[i][2];
            if(next_x >= 0 && next_x < r && next_y >= 0 && next_y < c && next_z >= 0 && next_z < l && mp[next_z][next_x][next_y] != '#' && !vis[next_z][next_x][next_y])
            {
                que[til].x = next_x;
                que[til].y = next_y;
                que[til++].z = next_z;
                step[next_z][next_x][next_y] = step[p.z][p.x][p.y] + 1;
                vis[next_z][next_x][next_y] = 1;
            }
            if(next_x == ex && next_y == ey && next_z == ez)
                break;
        }
    }
}
int main()
{
    while(1)
    {
        scanf("%d %d %d",&l,&r,&c);
        if(l == 0 && r == 0 && c == 0)
            break;
        for(int i = 0;i < l; i++)
        {
            for(int j = 0;j < r; j++)
            {
                scanf("%s",mp[i][j]);
                for(int k = 0;k < c; k++)
                {
                    if(mp[i][j][k] == 'S')
                    {
                        sx = j;
                        sy = k;
                        sz = i;
                        continue;
                    }
                    if(mp[i][j][k] == 'E')
                    {
                        ex = j;
                        ey = k;
                        ez = i;
                    }
                }
            }
        }
        bfs();
        if(step[ez][ex][ey] != 0)
            printf("Escaped in %d minute(s).\n",step[ez][ex][ey]);
        else
            printf("Trapped!\n");
    }
    return 0;
}

 

标签:Dungeon,til,int,50,next,BFS,Master,&&,que
From: https://blog.51cto.com/u_16131191/6356129

相关文章

  • K8s单master集群搭建
    (文章目录)集群搭建环境与配置:CentOS7.5系统,虚拟机2核4G内存50G硬盘主机名ip地址master192.168.10.144node1192.168.10.154node2192.168.10.155【若无特殊说明,以下操作默认都是在三台主机上同时进行】1.初始化集群环境一、配置ip、修改主机名ip最好使......
  • sqli_labs_master(LESS-2)
    LESS-2和第一关步骤一样,先判断输入/?id=1/?id=2/?id=1'输入1,2正常回显但加个单引号报错,说明是数字型,先用orderby 判断栏目数量(这里省略),然后再爆显示位/?id=1orderbyxxx/?id=-1unionselect1,2,3开始搞事!!!!!!!!!......
  • sqli_labs_master(LESS-1)
    LESS—1第一步:判断是否存在注入点输入/?id=1/?id=2有数据返回且不同,存在注入第二步:判断语句是否拼接,且是字符型还是数字型输入/id=1and1=2/?id=1'出现报错,判断是字符型,说明是单引号,闭合则可以用--+来注释掉后面的’输入/?id=1'and'1'='1/?id=1'and'1'='2......
  • Git强行替换覆盖master分支(转)
    应用场景说明:在开发中,通常会保持一个主分支master,及多个dev分支,但是因为dev分支的开发周期过长,迭代太多而没有及时维护master,导致后来发版上线的大部分代码都在dev分支上,如果将代码在master分支合并会导致很多冲突,最后想丢弃原始master分支上的代码,直接将已经测试确......
  • 代码一直在rebasing master状态,怎么重制到最新代码(不管之前的所有更改)
    根据你的gitstatus输出,你正在进行一个rebase操作,而且还有未完成的操作。如果你只想要让分支在最新的代码上,可以放弃当前的rebase操作,并从远程仓库拉取最新的代码,可以按照以下步骤进行操作:执行gitrebase--abort命令来放弃当前的rebase操作。执行gitfetchorigin......
  • BFS(广度优先搜索)
    代码:#include<bits/stdc++.h>usingnamespacestd;inta[100][100],v[100][100];//a为地图,v为记录是否访问structpoint{ intx; inty; intstep;};//建立访问节点的结构体queue<point>r;//创建队列intdx[4]={0,1,0,-1};intdy[4]={1,0,-1,0};//创建遍历方向intmain(......
  • 【愚公系列】2023年05月 .NET CORE工具案例-对象映射Master的使用
    (文章目录)前言对象映射框架Master可以帮助开发人员将对象映射到数据库,以进行数据持久化。它还可以支持ORM(对象关系映射),以及其他数据库技术,比如存储过程。它可以帮助开发人员更快、更有效地完成数据库操作。Master官网:https://github.com/MapsterMapper/Mapster一、对象映射m......
  • 使用教程 | 基于TSMaster如何实现LIN RBS 剩余总线仿真
    本文导读RBS全称是:residualbussimulation,也就是所谓的剩余总线仿真。主要是基于车载网络数据库,如CAN/LIN/FlexRay/以太网数据库,仿真该网络内部各个节点的通讯行为。本文主要讲解TSMaster中LINRBS的操作流程。本文目录:一、硬件连接准备二、TSMaster软件LINRBS操作流程1.......
  • pytorch-CycleGAN-and-pix2pix-master的操作使用
    我针对如何使用pytorch-CycleGAN-and-pix2pix-master的代码进行了简单讲解,代码链接在下:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pixvisdom可视化首先启动visdom可视化,可以看到loss变化等python-mvisdom.server然后在本地网页打开http://localhost:8097即......
  • k8s主备Master安装(Containerd)
    原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。邮箱:[email protected]文章基于CentOS7.8系统使用Containerdr作为容器运行时通过kubeadm指导搭建k8s多master节点集群。必备条件:需要服务器可以联网。环境节点说明主机名IP地址操作系统作用ma......