P2802 回家(dfs+三维数组标记+剪枝)
題目描述 小H在一個劃分成了n* m個方格的長方形封鎖線上。 每次他能向上下左右四個方向移動一格(當然小H不可以靜止不動), 但不能離開封鎖線,否則就被打死了。 剛開始時他有滿血6點,每移動一格他要消耗1點血量。一旦小H的 血量降到 0, 他將死去。 他可以沿路通過拾取鼠標(什么鬼。。。)來補滿血量。只要他走到有鼠標的格子,他不需要任何時間即可拾取。格子上的鼠標可以瞬間補滿,所以每次經過這個格子都有鼠標。就算到了某個有鼠標的格子才死去, 他也不能通過拾取鼠標補滿 HP。 即使在家門口死去, 他也不能算完成任務回到家中。
地圖上有 5 種格子:
數字 0: 障礙物。
數字 1: 空地, 小H可以自由行走。
數字 2: 小H出發點, 也是一片空地。
數字 3: 小H的家。
數字 4: 有鼠標在上面的空地。
小H能否安全回家?如果能, 最短需要多長時間呢?
輸入格式 第一行兩個整數n,m, 表示地圖的大小為n*m。
下面 n 行, 每行 m 個數字來描述地圖。
輸出格式 一行, 若小H不能回家, 輸出-1,否則輸出他回家所需最短時間。
輸入輸出樣例 輸入 #1
復制
3 3
2 1 1
1 1 0
1 1 3
輸出
#1
復制
4
說明/提示 1<=n,m<=9
思路:dfs挺不錯的一道題目。一開始看數據量會發現很小,但是如果不仔細看的話,會出現很多錯誤。首先要注意剪枝,如果說當前步數已經大于等于當前的最小值了,就不需要往下走了,因為再走也是枉然。其次就是每一個格子都有可能再次走到,但是走到的時候,能量值是不一樣的。因此在標記的時候需要開一個三維數組進行標記。
代碼如下:
努力加油a啊
總結
以上是生活随笔為你收集整理的P2802 回家(dfs+三维数组标记+剪枝)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基金专户是什么意思,向指定客户募资的管理
- 下一篇: 农行提前还房贷的流程,轻松六步完成还款