境界的彼方_lduoj_bfs宽搜

2023-11-06

Description

wyy是一个著名动画《境界的彼方》的男主,此时他非常的慌张,因为女主栗山未来进入了境界的彼方内部,并且花费了大量的血量去拯救wyy,wyy此时也进入了境界的彼方,他妈给了他一张地图去寻找境界的彼方的核心去拯救女主,现给你一张n×n的地图,以及男主的位置,问男主要拐弯几次才会到达境界的彼方内部(境界的彼方的位置为(n,n))
不过你以为这就是道搜索题?还得加条件:此时女主血条狂掉,你必须判断此时wyy是否可以走到终点且女主的血条不会掉光,如果掉光了那么输出"Die",如果地图无法到达境界的彼方(他妈坑他)就输出"No",如果到得了终点且女主血条活着输出res代表男主此时要拐弯几次

Input

给出n和k和x1和y1,k代表每拐弯一次女主要耗掉k滴血, 默认女主有100点血, x1和y1代表男主此时所在的位置

Output

根据题目要求输出

Samples

Input

3 3 1 1
110
010
011

Output
2
Input

3 50 1 1
110
010
011

Output
Die

Hint

1表示能走,0表示不能走;血量大于0时表示活着。

Source

石光中学 wyy套题 dfs bfs 深搜 广搜

当时比赛的时候由于种种原因咕咕咕了
现在补了一手

这道题目是比较板子的广搜题
在后面的博客中可能会总结到更多的相应的题目
代码可以更短,为了好理解没有进行处理,更方便理解一些

下面是基本的思路:
为什么要选择BFS ?
因为BFS的一个节点只能是从某一个节点转移过来,并不是从多个点转移过来的(加了vis数组)
而DFS的某一个节点就可能是从若干个节点转移过来的。
而这个题的背景来看,要输出转弯的次数,所以说就要首先有一个唯一的前驱节点转移得到,所以说BFS的优势显而易见,就要用到BFS
在写BFS的时候,我喜欢用cur表示当前的节点用next表示下一个节点,每当访问一个节点之后就将这个节点标记为1(vis数组)
对于开始点的位置,我们很巧妙的将开始的血量当成一个值放进结构体中,并且在搜索的过程中进行传递变化 (此处来源:大佬)在传递的过程中通过在四个方向的判断中加入转弯次数的变化,从而在最后进行输出(判断当前的方向和下一个的方向是否相同即可)

Main_code()

/*** keep hungry and calm PushyTao!***/
int n,m;
int stx,sty;
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
int a[1007][1007];
int vis[1007][1007];
struct node{
    int x;
    int y;
    int blood; ///start with 100
    int op;/// the operation
    int cnt;
};
bool edge(int x,int y){
    if(x>=1&&x<=n&&y>=1&&y<=n)
        return true;
    else return false;
}

void bfs(int x,int y){
    queue<node> que;
    node cur,next;
    cur.x = x;
    cur.y = y;
    cur.blood = 100;
    cur.op = -1;
    cur.cnt = 0;
    que.push(cur);
    int flag = 0;
    while(que.size() > 0){
        cur = que.front();
        que.pop();
        /// judge if get the edx and edy
        if(cur.x == n && cur.y == n){
            if(cur.blood < 0){
                puts("Die");
            }else{
                cout<<cur.cnt - 1<<endl;
            }
            flag = 1;
            break;
        }
        for(int i=0;i<4;i++){
            next.x = cur.x + dx[i];
            next.y = cur.y + dy[i];
            if(!edge(next.x,next.y)) continue;
            if(vis[next.x][next.y]) continue;
            if(a[next.x][next.y] == 0) continue;
            vis[next.x][next.y] = 1;
            int op = cur.op;
            if(i == 2 || i == 3){
                next.blood = cur.blood - m;
                next.op = i;
                if(op == 2 || op == 3) {
                    next.cnt = cur.cnt;
                    que.push(next);
                }else{
                    next.cnt = cur.cnt + 1;
                    que.push(next);
                }
            }else {
                next.blood = cur.blood - m;
                next.op = i;
                if(op == 1 || op == 0){
                    next.cnt = cur.cnt;
                    que.push(next);
                }else{
                    next.cnt = cur.cnt + 1;
                    que.push(next);
                }
            }

        }
    }
    if(flag == 0) puts("No");

}
int main() {
    n=read,m=read;/// n*n  - m / step
    stx=read,sty=read;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            scanf("%1d",&a[i][j]);
        }
    }
    if(stx == n && sty == n){
        puts("0");
        return 0;
    }
    bfs(stx,sty);
    return 0;
}
/**


**/

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

境界的彼方_lduoj_bfs宽搜 的相关文章

随机推荐

  • apache ii评分和死亡率_高大上的风险分层系统:APACHE评分到底是啥?

    APACHE的英文全称为Acute Physiology and Chronic Health Evaluation 中文译为急性生理与慢性健康评分 有个别文献也将APACHE的全文写为Acute Physiology Age and Ch
  • C++菱形继承问题

    多重继承 一个派生类继承了两个或两个以上的基类 如图 如果在多重继承中Class A 和Class B存在同名数据成员 则对Class C而言这个同名的数据成员容易产生二义性问题 这里的二义性是指无法直接通过变量名进行读取 需要通过域 成员
  • redis持久化机制,修改配置文件之后需要这么做才有用

    1 修改配置文件 2 修改完配置文件 想在启服务器的时候 服务区读取到配置文件需要 这么做 2 1 2 2 2 3 2 4 2 5 打开redis服务器也是需要这么操作 拖动server 和 config 才能去读到保存到硬盘的数据 转载于
  • stm32是小端模式还是大端模式

    STM32 是大端模式 在计算机体系结构中 有两种不同的方法来存储多字节数据类型 即大端模式和小端模式 在大端模式中 最高有效字节 即最左边的字节 存储在内存的低地址处 而最低有效字节 即最右边的字节 存储在内存的高地址处 相反 在小端模式
  • [python] 时间序列分析之ARIMA

    1 时间序列与时间序列分析 在生产和科学研究中 对某一个或者一组变量 x t x t 进行观察测量 将在一系列时刻 t1 t2 tn t 1 t 2 cdots t n 所得到的离散数字组成的序列集合 称之为时间序列 时间序列分析是根据系统
  • fill填充函数解析及用法示例

    fill填充函数解析及用法示例 fill x y color 其中x y是填充的范围 color是填充的颜色 1 对x y范围的获取 示例 所以可以得出x 0 1 1 0 y 0 0 1 1 示例代码如下 画一个填充图形 思路 首先需要得到
  • vue3.0通信方式之 Ref

    Ref通信方式 父传子 子传父 父传子
  • 鸿蒙石之鉴流程,鸿蒙石之鉴完全攻略!

    现在小肥皂给大家说说日常神器任务之鸿蒙石之鉴攻略及成就攻略 这是唯一一个起神器可以获得两个及以上五宝的神器 1 在长安传令天兵处领取任务 2 领取任务后来到傲来进行第一场战斗 封印法弟子是天宫会错乱封人 雷霆法弟子是天宫会雷霆万钧 五雷法弟
  • 栈的最小值

    请设计一个栈 除了常规栈支持的pop与push函数以外 还支持min函数 该函数返回栈元素中的最小值 执行push pop和min操作的时间复杂度必须为O 1 示例 MinStack minStack new MinStack minSta
  • utf8字符串转gb2312代码

    因iconv方法有些编译器不支持 则采用下面映射方法 完全代码参考 https download csdn net download weixin 55163060 84566848 unsigned short giGB2312 2124
  • 173.CI/CD(一):gitlab配置,jenkins的安装配置,jenkins实现基础的CI/CD,Sonarqube代码质量检测,Harbor镜像仓库

    目录 一 容器化持续集成的基础概念 1 敏捷开发 持续集成 持续交付 DevOps区别 2 为什么需要持续集成 3 如何设计持续集成流水线 4 什么是持续部署 1 概念 2 要素 3 常见自动化部署方法 4 如何测试部署的效果 5 项目进度
  • ACE日志系统之本机日志系统的多文件实现

    在文章 lt
  • Qt5入门系列之自关联槽函数与手动关联槽函数

    Qt5入门系列之自关联槽函数与手动关联槽函数 1 自关联槽函数 自关联函数适用于关系唯一且功能普通的的sender与槽函数的调用中 操作步骤 1 在 ui文件中选中sender右击 点击 转到槽 来到 cpp文件中 2 在自动生成的槽函数名
  • 6. JVM调优工具详解及调优实战

    JVM性能调优 1 前置启动程序 1 1 Jmap 1 1 1 Jmap查询内存信息 1 1 2 Jmap查询堆信息 1 1 3 jmap查询堆内存dump 1 2 Jstack 1 3 远程连接jvisualvm 1 4 jstack找出
  • 关于使用JSch连接sftp服务器引发的异常

    异常信息 com jcraft jsch JSchException Session connect java io IOException End of IO Stream Read at com jcraft jsch Session
  • vscode调用keil-MDK编译程序

    vscode的确很强大 很多人为它贡献插件 之前看过很多使用Vscode进行STM32开发的文章配置都好麻烦复杂 像我这种怕麻烦的就不想搞 就只能用vscode编辑程序 再切换到keil编译程序 比较麻烦些 然而这个痛点已经被一个dalao
  • STC89C51学习笔记-报错1:main.c(10): warning C206: ‘Delay500ms‘: missing function-prototype

    1 问题描述 报错信息 main c 10 warning C206 Delay500ms missing function prototype 在编写简单的LED闪烁程序时 编译程序出现以上错误提示 程序代码如下 include
  • OpenCV读取摄像头图像并实时显示

    我们直接上代码吧 import numpy as np import cv2 cap cv2 VideoCapture 0 0 选择笔记本电脑自带参数 1 为USB外置摄像头 print cap get 3 cap get 4 查看当前捕获
  • [ 常用工具篇 ] 渗透神器 whatweb 安装使用详解

    博主介绍 博主介绍 大家好 我是 PowerShell 很高兴认识大家 主攻领域 渗透领域 数据通信 通讯安全 web安全 面试分析 点赞 评论 收藏 养成习惯 一键三连 欢迎关注 一起学习 一起讨论 一起进步 文末有彩蛋 作者水平有限 欢
  • 境界的彼方_lduoj_bfs宽搜

    Description wyy是一个著名动画 境界的彼方 的男主 此时他非常的慌张 因为女主栗山未来进入了境界的彼方内部 并且花费了大量的血量去拯救wyy wyy此时也进入了境界的彼方 他妈给了他一张地图去寻找境界的彼方的核心去拯救女主 现