牛客练习赛12 B迷宫解题报告

2023-05-16

一切尽在代码中

#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;

const int maxn = 500 + 10;
char maze[maxn][maxn];
int vis[maxn][maxn][2];

int H,W;  //高、宽

int dx[] = {0,1,0,-1};   //移动
int dy[] = {1,0,-1,0};

struct Node
{
    int x,y;  //坐标
    int k;   //钥匙
    int step;  //步数
};

//检查坐标是否越界
bool out_of_bounds(int x, int y)
{
    if(x < 1 || x > H) return true;  //检查X轴坐标
    if(y < 1 || y > W) return true;  //检查Y轴坐标
    return false;
}

//检查是否是墙
bool isWall(int x, int y)
{
    if(maze[x][y] == 'W')
        return true;
    return false;
}

//判断是否被门挡住
bool stop_by_door(int x, int y, int k)
{
    if(maze[x][y] == 'D' && !k)
        return true;
    return false;
}

int main()
{
    while(scanf("%d%d",&H,&W) == 2)
    {
        for(int i = 1; i <= H; i++)
            scanf("%s",maze[i] + 1);

        int x,y;   //寻找起点
        for(int i = 1; i <= H; i++)
            for(int j = 1; j <= W; j++)
                if(maze[i][j] == 'S')
                {
                    x = i; y = j; break;
                }

        int ok = 0;
        memset(vis,0,sizeof(0));
        queue<Node> q;  //开始BFS
        q.push((Node){x,y,0,0});
        while(!q.empty())
        {
            Node p = q.front(); q.pop();  //取出栈顶元素

            if(maze[p.x][p.y] == 'E')
            {
                printf("%d\n",p.step);
                ok = 1;
                break;
            }

            for(int i = 0; i < 4; i++)
            {
                Node u = p;    //init
                u.x += dx[i]; u.y += dy[i];   //移动后的位置
                if(isWall(u.x,u.y)) continue;     //如果是墙
                if(out_of_bounds(x,y)) continue;   //检查是否越界
                if(vis[u.x][u.y][u.k]) continue;  //如果已经走过
                if(stop_by_door(u.x,u.y,u.k)) continue;   //如果被门挡住

                //得到新的节点
                u.step++;
                if(maze[u.x][u.y] == 'K') u.k = 1;
                vis[u.x][u.y][u.k] = 1;
                q.push(u);
            }
        }

        if(ok) continue;
        else printf("-1\n");
    }
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

牛客练习赛12 B迷宫解题报告 的相关文章

  • DOS查看端口占用情况并杀死占用某个端口的进程

    输入指令 netstat ano即可查看端口占用情况 找到自己想杀死的进程 xff0c 输入指令 xff1a taskkill PID 进程ID即可杀死进程 如果显示无法杀死 xff0c 可以强杀 xff0c 即输入指令 xff1a tas
  • Error:(37, 13) Failed to resolve: com.android.support:appcompat-v7:26 <a href="install.m2.repo">Inst

    报错信息 xff1a Error 37 13 Failed to resolve com android support appcompat v7 26 lt a href 61 34 install m2 repo 34 gt Insta
  • ACM中使用唯一分解定理

    一 求出整数n的素数因子 二 求出各素数因子的指数 三 利用这两组数据求解
  • 进程与程序的区别

    1 进程是动态的 xff0c 程序是静态的 2 进程有生命周期 xff0c 程序没有生命周期 3 一个进程只能对应一个程序 xff0c 一个程序却可以对应多个进程 没有建立进程的程序不能作为一个独立的单位获得操作系统的认可
  • 轻松上手vim

    vim是一款相当不错的文本编译器 xff0c 让我来介绍一下vim的基本使用方法 首先新建一个文件 xff0c 例如main cpp 命令为touch main cpp 然后使用vim打开 xff0c 命令为vim main cpp xff
  • AtCoder Regular Contest 085 C题题解

    通过给出的样例找出规律如下 xff1a 设循环的次数为k xff0c 则 k 61 2 m 设每次循环的花费为c xff0c 则 c 61 xff08 n m xff09 100 43 m 1900 故总的运行时间 x 61 k c 代码如
  • Split Linked List in Parts(LeetCode725)

    参加LeetCode weekly contest 58时的一道价值5分的题 xff0c 是关于数据结构的 要求将一个链表均分为k份 xff0c 如果不能均分 xff08 例如链表有6个节点而k 61 5 xff09 xff0c 则各个部分
  • Find Pivot Index(LeetCode 724)

    本想用贪心结果WA xff0c 看来只能老老实实的用枚举了 xff0c 简单粗暴实用 枚举中心轴 xff0c 从0开始 xff0c 定义两个变量left 和 right分别代表轴左边的数据之和以及轴右边的数据之和 xff0c 判断left是
  • B - fLIP

    题目链接 xff1a http code festival 2017 quala contest atcoder jp tasks code festival 2017 quala b 解题思路 xff1a 一个棋盘有N行 xff0c M列
  • 无根树转有根数

    include lt stdio h gt include lt vector gt include lt queue gt using namespace std const int maxn 61 1000 43 10 vector l
  • 【VC ++ 2010】 C语言 计算机二级编译器 Visual C ++ 2010 Express(中文学习版)的安装与使用

    文章目录 1 安装包地址2 安装2 1 安装VC 43 43 20102 2 打开VC 43 43 20102 3 注册 3 使用3 1 新建项目3 2 打开项目3 3 编写C文件并运行 1 安装包地址 链接 xff1a https pan
  • 怎样解题表

    怎样解题表是由美国数学家G 波利特提出的 具体的介绍见 xff1a https baike baidu com item E6 80 8E E6 A0 B7 E8 A7 A3 E9 A2 98 551528 fr 61 aladdin 怎样
  • C++中的::运算符

    原文出处 xff1a http blog csdn net libing zeng article details 54412935 一两行以上的成员函数最好被定义在类体之外 这要求一个特殊的声明语化来标识一 个函数是一个类的成员 xff1
  • C++创建类并应用

    新建一个Point h文件 在该文件中定义Point类 xff0c 代码如下 ifndef POINT H define POINT H class Point public Point void setPoint int x int y
  • UVA808(对蜂窝建立坐标系)

    这个题我是通过建立坐标系加找规律做出来的 xff0c 个人感觉难点是建立坐标系 xff0c 所以我将着重讲一下坐标系是怎么建立的 建立坐标系 xff1a 如果你有兴趣的话 xff0c 你可以将他给的图沿横线延长 xff0c 这样一个正六边形
  • Cats and Fish2017北京赛区网络同步赛

    题目链接 xff1a http hihocoder com problemset problem 1631 首先根据吃鱼的速度从小到大排序 xff0c 然后从1到x按着时间轴枚举猫的行为 xff0c 如果是吃完一条判断一下他的状态是正在吃鱼
  • leetcode729. My Calendar I

    设一个字典记录所有被预定的页面 xff0c 然后就是判断区间相交了 当发生以下两种情况之一时认为区间相交 1 起点小于左端点且终点大于左端点 2 起点大于等于左端点且起点小于右端点 代码如下 span class hljs class sp
  • 搭建java web开发环境(eclipse)

    引论 工欲善其事 xff0c 必先利其器 xff1b 想要进行web开发就必须有一款顺手的武器 xff0c eclipse作为一款知名的IDE自然是一个不错的选择 准备 eclipse依赖于JDK xff0c 所以我们在安装eclipse之
  • 安装codeblocks(win10)

    下载 进入http www codeblocks org downloads 26 xff0c 选择与你电脑对应的codeblocks版本 xff0c 这里以win10为例 xff0c 下载windows平台的codeblocks 注意要选
  • B - Palindrome-phobia(CODE FESTIVAL 2017 Final)

    题目链接 https cf17 final open contest atcoder jp tasks cf17 final b 解题思路 通过找规律发现出现的次数最多的字符与其他两个字符数量的差不能大于1 AC代码 include lt

随机推荐

  • poj1061青蛙的约会

    题目链接 http poj org problem id 61 1061 题目类型 扩展欧几里得算法 解题思路 设青蛙A为速度快的那只 xff0c 则有 m n t k l 61 y x 令a 61 m n b 61 l c 61 y c则
  • Android Studio中安装Kotlin插件

    http blog csdn net cto 1649900265 article details 72628878 这个链接内介绍了安装Kotlin插件的步骤 步骤 xff1a 在Android Studio中打开Settings xff
  • 骰子的游戏(牛客练习赛7)

    题目链接 https www nowcoder com acm contest 38 A 解题方法 枚举 AC代码 include lt stdio h gt const int maxn 61 10 43 5 int a maxn b m
  • C - Shopping Street(AtCoder Beginner Contest 080)

    题目链接 https beta atcoder jp contests abc080 tasks abc080 c 解题方法 因为一共只有十个时期所以我们可以枚举所有的状态 xff0c 又因为必须有1个时期开放 xff0c 所以我们从1而不
  • 经典OJ推荐

    转载自http acdream info topic tid 61 101 一 Online Judge简介 Online Judge系统 xff08 简称OJ xff09 是一个在线的判题系统 用户可以在线提交程序多种程序 xff08 如
  • 安装Tomcat(win10)

    引论 做web项目已经是一个很常见的事情了 xff0c 而我们完成后的web项目要想发布除了硬件的服务器外还需要相应的服务器软件 xff0c 而Tomcat就是一款web应用服务器 尽管因为Nginx xff08 它的性能是Apache服务
  • org.hibernate.InstantiationException: No default constructor for entity: cn.gov.entity.Book

    出错地方 xff1a org hibernate InstantiationException No default constructor for entity cn gov entity Book 出错原因 xff1a hibernat
  • 牛客练习赛8 D加边的无向图

    题目链接 https www nowcoder com acm contest 39 D 解题思路 利用并查集查找一共有几个独立的集合 xff0c 最后需要的最少边为集合个数减一 AC代码 include lt stdio h gt inc
  • 解决getHibernateTemplate().save ()不能将数据保存到数据库的问题

    原文出自http blog csdn net justerdu article details 50893583 分析 xff1a 数据是保存在缓存中而未提交到数据库中 解决办法 xff1a 在hibernate cfg xml里面加入 h
  • 输入ctrl s终端冻结怎么办

    原文出自http www xshellcn com zhishi sr ztd html 大家有没有发现每当输入ctrl s 就暂停该终端 让人着急万分 xff0c 我相信这是很多xshell的用户都会遇到的一个问题 xff0c 那应该怎么
  • java大数详解

    引论 在算法竞赛中我们经常遇到大数问题 xff0c 例如求一个很大的斐波那契数 住在这种情况下我们用常规解法 xff08 使用long long或long long int xff09 肯定是不行的 xff0c 而我们自己写一个大数的算法又
  • ACM数论模板及应用

    引论 数论是算法竞赛的宠儿 xff0c 几乎每个算法竞赛 xff08 不论是ACM的省赛 区域赛还是牛客网上的网络赛 xff09 都会出一道关于数论的题 这很容易理解 xff0c 因为算法与数学的关系极其密切 xff0c 也可以说算法拼到最
  • 深度神经网络的应用

    深度学习能应用在哪些领域 xff1f 深度学习的快速发展 xff0c 不仅使机器学习得到许多实际的应用 xff0c 还拓展了整个AI xff08 人工智能的 xff09 的范围 它将任务进行拆解 xff0c 使得各种类型的机器辅助变成可能
  • <操作系统>读者写者问题(写者优先)C语言实现

    问题描述 代码 span class token macro property span class token directive keyword include span span class token string lt stdio
  • 二叉树的节点个数以及高度详解(附图解)

    二叉树的节点个数以及高度 文章目录 二叉树的节点个数以及高度前言NO 1 定义链式二叉树NO 2 创建二叉树一 二叉树节点个数1 代码展示2 递归图解 二 二叉树叶子节点个数1 代码展示2 递归图解 三 二叉树第k层节点个数1 代码展示2
  • 使用Github Desktop轻松进行版本管理

    引论 现在git已经成为了主流的版本管理软件 xff0c 然而是不是有一些一看到命令行就头痛的初学者 xff08 比如我 xff09 呢 xff1f 不过好在有着各种各样的图形界面软件可以帮助我们摆脱这一烦恼 xff0c 就比如说githu
  • Leetcode 100. Same Tree

    分析 这道题算是一道关于树的简单题 xff0c 我们需要判断给出的两棵树是否相等 xff0c 分为三步 xff0c 判断当前节点是否相等 xff0c 判断左右子树是否相等 要特别注意一下为NULL的情况 我的代码 span class hl
  • Python小程序之文件清理机

    背景 作为一名Acmer我写了很多 cpp文件 xff0c 其中经过编译 链接后又生成了许多 exe和 o文件 当我用github desktop将他们同步到我的github上是 exe和 o文件很碍事 xff0c 尤其是 exe文件占用的
  • hdu1076

    题目链接 An Easy Task 解题思路 题目要求给出一个年份Y和一个整数N xff0c 输入从Y年起第N个闰年 首先我们容易知道我们需要判断一个年份是否是闰年 xff0c 我们可以把它封装成一个函数 xff0c 这样可以方便我们下次调
  • 牛客练习赛12 B迷宫解题报告

    一切尽在代码中 include lt stdio h gt include lt string h gt include lt queue gt include lt algorithm gt using namespace std con