蓝桥试题:混境之地(记忆化搜索)

一、问题描述

小蓝有一天误入了一个混境之地。

好消息是:他误打误撞拿到了一张地图,并从中获取到以下信息:

  1. 混境之地是一个n⋅m 大小的矩阵,其中第 i 行第 j 列的的点 h i j​ 表示第 i 行第 j 列的高度。
  2. 他现在所在位置的坐标为 (A,B) ,而这个混境之地出口的坐标为 (C,D) ,当站在出口时即表示可以逃离混境之地。
  3. 小蓝有一个喷气背包,使用时,可以原地升高 k个单位高度。

坏消息是:

  1. 由于小蓝的体力透支,所以只可以往低于当前高度的方向走。
  2. 喷漆背包燃料不足,只可以最后使用一次。

小蓝可以往上下左右四个方向行走,不消耗能量。

小蓝想知道他能否逃离这个混境之地,如果可以逃离这里,输入 Yes ,反之输出 No 。

输入格式

第 1 行输入三个正整数 n,m 和 k ,n,m 表示混境之地的大小,k 表示使用一次喷气背包可以升高的高度。

第 2 行输入四个正整数 A,B,C,D ,表示小蓝当前所在位置的坐标,以及混境之地出口的坐标。

第 33 行至第 n+2 行,每行 m 个整数,表示混境之地不同位置的高度。

输出格式

输出数据共一行一个字符串:

  • 若小蓝可以逃离混境之地,则输出 Yes 。
  • 若小蓝无法逃离混境之地,则输出 No 。

样例输入

5 5 30
1 1 5 5
3 20 13 12 11
19 17 33 72 10
12 23 12 23 9
21 43 23 12 2
21 34 23 12 1

样例输出

Yes

二、代码展示

import java.util.Arrays;
import java.util.Scanner;public class ikun {static int n,m,k;static int[][] dp;public static void main(String[] args) {Scanner scan = new Scanner(System.in);n = scan.nextInt();m = scan.nextInt();k = scan.nextInt();int A = scan.nextInt() - 1;int B = scan.nextInt() - 1;int C = scan.nextInt() - 1;int D = scan.nextInt() - 1;int[][] f = new int[n][m];  //地图的二维矩阵dp = new int[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {f[i][j] = scan.nextInt();dp[i][j] = -1;}}dfs(A , B, f , 1);if (dp[C][D]  == 1){System.out.println("Yes");}else System.out.println("No");}public static void dfs(int a , int b ,int[][] f , int flag){ //flag = 1表示没使用背包dp[a][b] = 1;int[] dx = {0 , 0 , 1 , -1};int[] dy = {1 , -1 , 0 , 0};for (int i = 0; i < 4; i++) {int x  = a + dx[i];int y  = b + dy[i];if (x < 0 || x >= n || y < 0 || y >= m || dp[x][y] == 1) continue;if (f[a][b] >= f[x][y]){dfs(x , y , f , flag);}else {if (k + f[a][b] >= f[x][y] && flag == 1){dfs(x , y ,f , 0);}}}}
}

代码结构解析


1.变量声明:


   n, m, k:分别表示地图的行数、列数和背包的能力值。
   dp:二维数组,用于记录已访问的节点,防止重复遍历。
   

 输入处理:
   读取地图大小、背包能力、起点和终点的坐标(调整为0-based索引)。

   初始化地图数据f和访问标记数组dp。
   

2.DFS函数:

 参数:当前位置(a, b)、地图数据f、标志位flag(1表示未使用背包,0表示已使用)。

 逻辑:
     标记当前节点为已访问。
    遍历四个方向(上下左右),检查相邻节点是否合法且未被访问。
    直接移动:若相邻节点高度≤当前节点,无需背包即可移动。
    使用背包移动:若相邻节点高度>当前节点,且未使用过背包(flag=1),且当前节点高      度 +k≥相邻节点高度,则切换为背包模式继续搜索。

结果判断:
  在主函数中调用DFS后,检查终点是否被访问过,输出"Yes"或"No"。
 

3.核心逻辑说明
   

移动规则:

   普通移动:当目标节点高度≤当前节点时,可直接移动(无需背包)。
   背包辅助移动:当目标节点高度>当前节点时,若尚未使用背包且当前节点高度+k足够覆     盖高度差,则使用背包一次允许移动。

背包机制:

    每个路径最多只能使用一次背包。一旦使用(flag=0),后续所有移动均不可再用。

DFS特性:

    递归探索所有可能的路径,利用dp数组剪枝已访问节点,避免循环。


总结
该代码通过DFS遍历所有可能的路径,结合背包机制解决特定高度差的移动问题,最终判断是否存在符合条件的路径。核心在于合理利用标志位控制背包使用,并通过剪枝避免重复计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/72468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CC++链接数据库(MySQL)超级详细指南

C/C链接数据库&#xff08;MySQL&#xff09;超级详细指南 在C/C编程中&#xff0c;与数据库进行交互是一项常见的任务。MySQL作为一个广泛使用的开源关系型数据库管理系统&#xff0c;提供了丰富的API供C/C开发者使用。本文将详细介绍如何在C/C程序中链接MySQL数据库&#xf…

基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 EM算法 E步:期望步 M步:最大化步 4.2 GMM模型 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 程序运行配置环境&#xff1a; 人工智能算法…

制服小程序的“滑手”:禁用页面左右滑动全攻略

哈哈&#xff0c;看来你已经很聪明地发现了小程序中左右滑动的“顽皮”行为&#xff01;&#x1f604; 没错&#xff0c;我们可以通过设置 disableScroll 属性来“管教”它&#xff0c;同时结合 CSS 样式让页面既禁得住横向“乱跑”&#xff0c;又能顺畅地上下滚动。你的方案已…

docker学习笔记(1)从安装docker到使用Portainer部署容器

docker学习笔记第一课 先交代背景 docker宿主机系统&#xff1a;阿里云ubuntu22.04 开发机系统&#xff1a;win11 docker镜像仓库&#xff1a;阿里云&#xff0c;此阿里云与宿主机系统没有关系&#xff0c;是阿里云提供的一个免费的docker仓库 代码托管平台&#xff1a;github&…

stable-diffusion-webui 加载模型文件

背景 stable-diffusion-webui 安装完毕后&#xff0c;默认的模型生成的效果图并不理想&#xff0c;可以根据具体需求加载指定的模型文件。国内 modelscope 下载速度较快&#xff0c;以该站为例进行介绍 操作步骤 找到指定的模型文件 在 https://modelscope.cn/models 中查找…

kotlin高级用法总结

Kotlin 是一门功能强大且灵活的编程语言&#xff0c;除了基础语法外&#xff0c;它还提供了许多高级特性&#xff0c;可以帮助你编写更简洁、高效和可维护的代码。以下是 Kotlin 的一些高级用法&#xff0c;涵盖了协程、扩展函数、属性委托、内联类、反射等内容。 协程&#x…

Linux网络 NAT、代理服务、内网穿透

NAT 技术 IPv4 协议中存在 IP 地址数量不充足的问题&#xff0c;而 NAT 技术是当前解决 IP 地址不够用的主要手段 , 是路由器的一个重要功能。NAT 能够将私有 IP 对外通信时转为全局 IP&#xff0c;也就是就是一种将私有 IP 和全局 IP 相互转化的技术方法。 这可以让很多学…

世界模型在塑造自动驾驶中的作用:综述

25年2月来自华中理工和百度的论文“”The Role of World Models in Shaping Autonomous Driving: A Comprehensive Survey“。 驾驶世界模型 (DWM) 专注于预测驾驶过程中的场景演变&#xff0c;已成为实现自动驾驶一个有前途的范例。这些方法使自动驾驶系统能够更好地感知、理…

全向广播扬声器在油气田中的关键应用 全方位守护安全

油气田作为高风险作业场所&#xff0c;安全生产始终是重中之重。在紧急情况下&#xff0c;如何快速、有效地传达信息&#xff0c;确保人员安全撤离&#xff0c;是油气田安全管理的关键环节。全向广播扬声器凭借其全方位覆盖、高音质输出和强大的环境适应性&#xff0c;成为油气…

【AI大模型】AI赋能,使用DeepSeek 高效制作PPT实战详解

目录 一、前言 二、传统 PPT 制作问题 2.1 传统方式制作 PPT 2.2 AI 大模型辅助制作 PPT 2.3 适用场景对比分析 2.4 最佳实践与推荐 三、DeepSeek Kimi 高效制作PPT操作实践 3.1 Kimi 简介 3.2 DeepSeek Kimi 制作PPT优势 3.2.1 DeepSeek 优势 3.2.2 Kimi 制作PPT优…

【51单片机】程序实验13.串口通信

主要参考学习资料&#xff1a;B站【普中官方】51单片机手把手教学视频 开发资料下载链接&#xff1a;http://www.prechin.cn/gongsixinwen/208.html 前置知识&#xff1a;C语言 单片机套装&#xff1a;普中STC51单片机开发板A4标准版套餐7 目录 通信的基本概念串行通信与并行通…

论文阅读笔记:ArcFace: Additive Angular Margin Loss for Deep Face Recognition

论文阅读笔记&#xff1a;ArcFace: Additive Angular Margin Loss for Deep Face Recognition 1 背景2 创新点3 方法4 模块4.1 Softmax4.2 权重归一化4.3 乘性角度间隔4.4 特征归一化4.5 加性余弦间隔4.6 加性角度间隔4.7 二值化情况下的比较4.8 目标Logit分析 5 效果5.1 消融实…

代码随想录算法训练营 | 图论 | DFS

98. 所有可达路径// DFS #include <bits/stdc.h> using namespace std;vector<vector<int>> result; vector<int> path;void dfs(const vector<list<int>> &graph, int i, int target) {if (i target) {result.push_back(path);retu…

GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks

GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks KDD22 推荐指数&#xff1a;#paper/⭐⭐#​ 动机 本文探讨了图神经网络&#xff08;GNN&#xff09;在迁移学习中“预训练-微调”框架的局限性及改进方向。现有方法通过预训练&#xff08…

迷你世界脚本方块接口:Block

方块接口&#xff1a;Block 彼得兔 更新时间: 2024-08-27 11:04:56 具体函数名及描述如下&#xff1a; 序号 函数名 函数描述 1 isSolidBlock(...) 是否是固体方块 2 isLiquidBlock(...) 是否是液体方块 3 isAirBlock(...) 是否是气体方块 4 getBl…

Windows下git疑难:有文件无法被跟踪

Windows下git疑难&#xff1a;有文件无法被跟踪 最近在写一个c# WinFrom程序&#xff0c; 奇怪的是&#xff0c;frmMain.cs这个文件一直无法被跟踪 研究了很久&#xff0c; 参考这一篇 https://blog.csdn.net/m0_37315653/article/details/83064810 git rm --cached ./ -r 之…

Live2d官方项目运行

Live2d官方项目运行 1-参考网址 教程网址&#xff1a;https://blog.csdn.net/qq_39123467/article/details/131735085live2d官方地址&#xff1a;https://live2d.com/cubism-sdk/download/ 2-上手实践 1&#xff09;先打开官方项目-全部路径打开2&#xff09;cd /CubismSdkFo…

BUU43 [BJDCTF2020]The mystery of ip 1

前置知识&#xff1a; X - Forwarded - For注入 X - Forwarded - For&#xff08;XFF&#xff09;是一个 HTTP 头字段&#xff0c;用于记录客户端的真实 IP 地址。当客户端请求经过代理服务器时&#xff0c;代理服务器会将客户端的 IP 地址添加到 X - Forwarded - For 头中。…

张岳教授:语言模型推理与泛化研究 | ICLR 2025 特邀报告与团队专场

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; AITIME 01 ICLR 2025预讲会特邀报告 AITIME 02 ICLR 2025预讲会西湖大学张岳老师实验室专场 01 AI生成文本的自动化检测 Glimpse: Enabling White-Box Methods to Use Proprietary Models for Zero-Shot LLM-Ge…

MySQL SQL 优化专题

MySQL SQL 优化专题 1. 插入数据优化 -- 普通插入&#xff08;不推荐&#xff09; INSERT INTO tb_user VALUES(1,tom); INSERT INTO tb_user VALUES(2,cat); INSERT INTO tb_user VALUES(3,jerry);-- 优化方案1&#xff1a;批量插入&#xff08;推荐&#xff0c;不建议超过1…