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