尋寶之旅 挖掘最多金礦的走法 (DFS+最佳化)Leetcode #1219

閱讀時間約 5 分鐘

題目敘述

題目給定一個二維的整數陣列,每個格子點裡面的數字代表金礦的多寡。

從任何一個有金礦的格子點出發,以四聯通N4的方式向探索周圍的格子點,每個格子點只能拜訪一次,不能重複拜訪

請問最多能挖到多少金礦


原本的英文題目敘述


測試範例

Example 1:

Input: grid = [[0,6,0],[5,8,7],[0,9,0]]
Output: 24
Explanation:
[[0,6,0],
[5,8,7],
[0,9,0]]
Path to get the maximum gold, 9 -> 8 -> 7.

Example 2:

Input: grid = [[1,0,7],[2,0,6],[3,4,5],[0,3,0],[9,0,20]]
Output: 28
Explanation:
[[1,0,7],
[2,0,6],
[3,4,5],
[0,3,0],
[9,0,20]]
Path to get the maximum gold, 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7.ㄖㄨˉ

約束條件

Constraints:

  • m == grid.length

m代表地圖的高

  • n == grid[i].length

n代表地圖的寬

  • 1 <= m, n <= 15

地圖的高m 和 地圖的寬n都介於1 ~ 15之間。

  • 0 <= grid[i][j] <= 100

每個格子點蘊藏的金礦介於0~100單位之間。

  • There are at most 25 cells containing gold.

最多有25個格子點蘊藏金礦。


演算法 DFS模擬N4走法

從題意出發,每個格子點可以向東、南、西、北四個方向探索,而且不可以重複拜訪

相當於

最多金礦挖掘數

= 當下格子點的金礦數量 +Max{ 從N4挑一條路徑,拜訪可拿到的金礦}

= 當下格子點的金礦數量 + Max{向北、向東、向西、向南探索 可拿到的金礦}


使用DFS模擬N4走法,配合最大值的選擇策略最佳化即可。


程式碼 DFS模擬N4走法

class Solution:
def getMaximumGold(self, grid: List[List[int]]) -> int:

h, w = len(grid), len(grid[0])

def dfs(r,c):

## Base case
# Out-of-boundary or visited or no score
if not ( 0 <= r < h) or not ( 0 <= c < w ) or grid[r][c] <= 0:
return 0

## General cases
# Go on maximal score path in N4
cur = grid[r][c]

# mark as visited to avoid repeated traversal
grid[r][c] = - cur

# Select path with maximal score in N4
res = cur + max(dfs(r+1, c), dfs(r-1, c), dfs(r, c+1), dfs(r, c-1))

# restore origin state
grid[r][c] *= -1
return res

# ----------------------------
best = 0

# 2D board scan
for r in range(h):
for c in range(w):
if grid[r][c] > 0:
best = max(best, dfs(r,c))

return best

複雜度分析

時間複雜度: O(h*w + k*4^k)

需要一個2D掃描,掃描每個格子點恰好掃描一次。

最多有k個含有金礦的格子點,每次可探索四個相鄰的鄰居格子點,
探索路徑狀態最多為O(k*4^k)


空間複雜度: O(k)

探索深度最深為O(k),就是把可能相鄰的k個含有金礦的格子點都走過一遍。


關鍵知識點

從題意出發,每個格子點可以向東、南、西、北N4四個方向探索,
而且不可以重複拜訪

相當於

最多金礦挖掘數

= 當下格子點的金礦數量 +Max{ 從N4挑一條路徑,拜訪可拿到的金礦}

= 當下格子點的金礦數量 + Max{向北、向東、向西、向南探索 可拿到的金礦}


Reference

[1] Path with Maximum Gold - LeetCode

86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目敘述 輸入給定一個鏈結串列,整體看代表一個十進位的數字,各別看每個節點代表每個digit,分別從最高位~最低位個位數。 要求我們把原本的數字乘以二,並且以鏈結串列的形式返回答案。 原本的英文題目敘述
題目敘述 輸入給定一個鏈結串列的head node。 要求我們進行化簡,只要某個節點的右手邊存在比較大的節點,就刪除掉。 例如 5->2->13->3 5的右手邊有13,所以5刪除掉。 2的右手邊有13,所以2刪除掉。 13的右手邊沒有更大的節點,所以13留著。 3的右手邊沒有更大
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 組合數之和 Combination Sum 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所以可能的情況,
今天的一魚三吃系列是透過 兩點之間是否存在一條路徑的題目,來回顧以前學過的DFS、BFS和Disjoint Set,鞏固圖論演算法的知識點。 英文的題目敘述在這裡 題目敘述 給定我們已知n個節點的圖,和圖上的每一條無向邊edges。 請問給定的起點start和終點end是否存在一條路徑可
今天的官方每日一題是Island Perimeter島嶼周長,很有趣的一題。 題目非常直觀好懂。也很適合拿來作為多角度複習、回顧圖論演算法的好題目。 英文的題目敘述在這裡 題目敘述 題目會給我們一個二維陣列當作地圖,格子點為1代表陸地,格子點為0代表海洋。 要求我們以四連通N4的方式拜訪
題目敘述 題目會給定一顆二元樹的根結點, 要求我們在指定的層樹d,插入新的一層,節點值為v。 原本的左、右子樹,就成為新的那一層的左子樹、右子樹。 題目的原文敘述 測試範例 Example 1: Input: root = [4,2,6,3,1,5], val = 1, depth =
題目敘述 輸入給定一個鏈結串列,整體看代表一個十進位的數字,各別看每個節點代表每個digit,分別從最高位~最低位個位數。 要求我們把原本的數字乘以二,並且以鏈結串列的形式返回答案。 原本的英文題目敘述
題目敘述 輸入給定一個鏈結串列的head node。 要求我們進行化簡,只要某個節點的右手邊存在比較大的節點,就刪除掉。 例如 5->2->13->3 5的右手邊有13,所以5刪除掉。 2的右手邊有13,所以2刪除掉。 13的右手邊沒有更大的節點,所以13留著。 3的右手邊沒有更大
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 組合數之和 Combination Sum 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所以可能的情況,
今天的一魚三吃系列是透過 兩點之間是否存在一條路徑的題目,來回顧以前學過的DFS、BFS和Disjoint Set,鞏固圖論演算法的知識點。 英文的題目敘述在這裡 題目敘述 給定我們已知n個節點的圖,和圖上的每一條無向邊edges。 請問給定的起點start和終點end是否存在一條路徑可
今天的官方每日一題是Island Perimeter島嶼周長,很有趣的一題。 題目非常直觀好懂。也很適合拿來作為多角度複習、回顧圖論演算法的好題目。 英文的題目敘述在這裡 題目敘述 題目會給我們一個二維陣列當作地圖,格子點為1代表陸地,格子點為0代表海洋。 要求我們以四連通N4的方式拜訪
題目敘述 題目會給定一顆二元樹的根結點, 要求我們在指定的層樹d,插入新的一層,節點值為v。 原本的左、右子樹,就成為新的那一層的左子樹、右子樹。 題目的原文敘述 測試範例 Example 1: Input: root = [4,2,6,3,1,5], val = 1, depth =
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
這篇想要統整一下我嘗試過的各種我覺得不錯的化妝品,在逛過了無數百貨公司之後,經過了無數朋友推薦,終於在每一個不同功能的化妝品上都找到還不錯的牌子,雖然還是個化妝小白,但總覺得可以推薦一下。 底妝區 妝前乳Primer:Laura Mercier Pure Canvas Primer- B
Thumbnail
一段關於尋找寶物的冒險之旅。主角在夢境和現實中面臨種種麻煩和挑戰,最終找到了適合的方法處理這些寶物。
Thumbnail
愛沙尼亞國土面積有 47% 的森林覆蓋率,也有許多自然形成的湖泊,因此有很多未被開發的地方,被規劃成自然公園的保護區,而這些也是真正的"秘境",因為人煙罕至,所以保留了最原始的風貌。讓我印象最深刻,也是我最喜歡的就是 Luhasso 的沼澤湖。 Luhasso  是一個自然生態保護區,位於 Haa
Thumbnail
身為超級敏感肌的我,來到美國這個大乾地後又經歷了一次皮膚的洗禮,一樣也是經過不少醫生的建議才穩定下來。
Thumbnail
在九份金瓜石的「黃金博物館」展開尋寶之旅,DIY淘金和深入礦坑裡探險。在博物館裡看到了各種顏色的礦石、縮小版的迷你礦坑模型,還有一塊鎮館之寶的超級大金磚。在礦工食堂大口咬著排骨便當,走到太子賓館和彩虹階梯,最後找了一家咖啡廳稍作休息,堡包們用手機的手電筒,照向剛剛淘到的砂金,閃閃發亮真的有黃金耶!
Thumbnail
在職涯諮詢或履歷健檢的經驗中,往往會碰到某一類型的求職者,有著漂亮或至少平均以上的學經歷,但從履歷看起來的職涯軌跡總是有些跳躍,無論是產業或是職能不連貫,還是當詢問到為什麼轉職時,這類型求職者總會皺起眉頭回想,好像一切都是巧合。
Thumbnail
在疫情嚴峻之時,國家該將年度預算撥給大受打擊的觀光產業及補助中低收入家庭,還是堅持以高價購藏荷蘭大師林布蘭特的畫作,將這件多年來屬於法國私人收藏的國寶迎回故鄉?這是2021年荷蘭政府面臨的難題。
Thumbnail
以下為投資研究,其中股票標的的部分,無任何推薦買賣之意,期中也無勸誘投資之行為,投資人應謹慎研究標的與評估風險,內容僅供投資邏輯參考。 亂世中的避風港 本次會先從低波動ETF中來做觀察,切入到其中產業特性與個股的波動度計算,來看看是不是適合作為定存股的標的。 低波動股票的好處? 0050 觀察點:
Thumbnail
許多耳熟能詳的歷史在現代的我們大多僅僅只能在書本上和電視劇得知,但如果自己不只可以親自走一遭,甚至根本住在附近…誇張一點,出個門看到的雕像是唐朝大人物,走的橋是明朝古橋,這真的是讓我非常不可思議! 近期的「竹墩古村景區」打造了與竹墩村江南水鄉相契合的燈光秀,巧借景致營造沉浸式夜游“3D”氛圍。
Thumbnail
若是沒有附帶條件的說「當你真心渴望某樣東西,全宇宙的力量就會來幫助你」,所造成的負面後遺症會比正面影響還多。我過去所談的「夢想」,並不是一廂情願地主張不顧現實條件、而一昧追求自己的夢想,而是要懂得區分「夢想」跟「目標」的不同。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
這篇想要統整一下我嘗試過的各種我覺得不錯的化妝品,在逛過了無數百貨公司之後,經過了無數朋友推薦,終於在每一個不同功能的化妝品上都找到還不錯的牌子,雖然還是個化妝小白,但總覺得可以推薦一下。 底妝區 妝前乳Primer:Laura Mercier Pure Canvas Primer- B
Thumbnail
一段關於尋找寶物的冒險之旅。主角在夢境和現實中面臨種種麻煩和挑戰,最終找到了適合的方法處理這些寶物。
Thumbnail
愛沙尼亞國土面積有 47% 的森林覆蓋率,也有許多自然形成的湖泊,因此有很多未被開發的地方,被規劃成自然公園的保護區,而這些也是真正的"秘境",因為人煙罕至,所以保留了最原始的風貌。讓我印象最深刻,也是我最喜歡的就是 Luhasso 的沼澤湖。 Luhasso  是一個自然生態保護區,位於 Haa
Thumbnail
身為超級敏感肌的我,來到美國這個大乾地後又經歷了一次皮膚的洗禮,一樣也是經過不少醫生的建議才穩定下來。
Thumbnail
在九份金瓜石的「黃金博物館」展開尋寶之旅,DIY淘金和深入礦坑裡探險。在博物館裡看到了各種顏色的礦石、縮小版的迷你礦坑模型,還有一塊鎮館之寶的超級大金磚。在礦工食堂大口咬著排骨便當,走到太子賓館和彩虹階梯,最後找了一家咖啡廳稍作休息,堡包們用手機的手電筒,照向剛剛淘到的砂金,閃閃發亮真的有黃金耶!
Thumbnail
在職涯諮詢或履歷健檢的經驗中,往往會碰到某一類型的求職者,有著漂亮或至少平均以上的學經歷,但從履歷看起來的職涯軌跡總是有些跳躍,無論是產業或是職能不連貫,還是當詢問到為什麼轉職時,這類型求職者總會皺起眉頭回想,好像一切都是巧合。
Thumbnail
在疫情嚴峻之時,國家該將年度預算撥給大受打擊的觀光產業及補助中低收入家庭,還是堅持以高價購藏荷蘭大師林布蘭特的畫作,將這件多年來屬於法國私人收藏的國寶迎回故鄉?這是2021年荷蘭政府面臨的難題。
Thumbnail
以下為投資研究,其中股票標的的部分,無任何推薦買賣之意,期中也無勸誘投資之行為,投資人應謹慎研究標的與評估風險,內容僅供投資邏輯參考。 亂世中的避風港 本次會先從低波動ETF中來做觀察,切入到其中產業特性與個股的波動度計算,來看看是不是適合作為定存股的標的。 低波動股票的好處? 0050 觀察點:
Thumbnail
許多耳熟能詳的歷史在現代的我們大多僅僅只能在書本上和電視劇得知,但如果自己不只可以親自走一遭,甚至根本住在附近…誇張一點,出個門看到的雕像是唐朝大人物,走的橋是明朝古橋,這真的是讓我非常不可思議! 近期的「竹墩古村景區」打造了與竹墩村江南水鄉相契合的燈光秀,巧借景致營造沉浸式夜游“3D”氛圍。
Thumbnail
若是沒有附帶條件的說「當你真心渴望某樣東西,全宇宙的力量就會來幫助你」,所造成的負面後遺症會比正面影響還多。我過去所談的「夢想」,並不是一廂情願地主張不顧現實條件、而一昧追求自己的夢想,而是要懂得區分「夢想」跟「目標」的不同。