藍橋試題:混境之地(記憶化搜索)

一、問題描述

小藍有一天誤入了一個混境之地。

好消息是:他誤打誤撞拿到了一張地圖,并從中獲取到以下信息:

  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.pswp.cn/bicheng/72468.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72468.shtml
英文地址,請注明出處:http://en.pswp.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…