黃金礦工 回溯演算法

2021-10-08 06:37:03 字數 1208 閱讀 7898

你要開發一座金礦,地質勘測學家已經探明了這座金礦中的資源分布,並用大小為 m * n 的網格 grid 進行了標註。每個單元格中的整數就表示這一單元格中的**數量;如果該單元格是空的,那麼就是 0。

為了使收益最大化,礦工需要按以下規則來開採**:

示例 2:

輸入:grid = [[1,0,7],[2,0,6],[3,4,5],[0,3,0],[9,0,20]]

輸出:28

解釋:[[1,0,7],

[2,0,6],

[3,4,5],

[0,3,0],

[9,0,20]]

一種收集最多**的路線是:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7。

**解題思路:**根據題意,其實思路很簡單,我們把每乙個**不為0的grid[i][j]當做入口,然後這時候我們會遇到4種選擇,上下左右,我們對每乙個方向都嘗試一遍,然後當我們走過乙個格仔時,就將其置為不可通過,當我們無路可走時,記下挖到的金子的總數,然後退回一步,重新選擇其他方向,當所有方向都走過時,就繼續往前退一步

我們先定義乙個二維陣列boolean pass表示走過的格仔

初始化如下:

for(int i=0; i我們從每乙個格仔出發,然後呼叫dfs函式進行遞迴嘗試

for(int i=0; i四個方向的嘗試**如下

for(int i=1; i<=4; i++) //1234表示左上右下

break;

case 2:

if(r-1>=0)

if(pass[r-1][c])

break;

case 3:

if(c+1完整**如下:

class solution

break;

case 2:

if(r-1>=0)

if(pass[r-1][c])

break;

case 3:

if(c+1if(pass[r][c+1])

break;

case 4:

if(r+1if(pass[r+1][c])

break;}}

gold = math.max(sum,gold); //當無路可走時,gold取大的乙個

return;

}}

leetcode 黃金礦工

你要開發一座金礦,地質勘測學家已經探明了這座金礦中的資源分布,並用大小為 m n 的網格 grid 進行了標註。每個單元格中的整數就表示這一單元格中的 數量 如果該單元格是空的,那麼就是 0。為了使收益最大化,礦工需要按以下規則來開採 每當礦工進入乙個單元,就會收集該單元格中的所有 礦工每次可以從當...

leetcode1219 黃金礦工(回溯)

你要開發一座金礦,地質勘測學家已經探明了這座金礦中的資源分布,並用大小為 m n 的網格 grid 進行了標註。每個單元格中的整數就表示這一單元格中的 數量 如果該單元格是空的,那麼就是 0。為了使收益最大化,礦工需要按以下規則來開採 每當礦工進入乙個單元,就會收集該單元格中的所有 礦工每次可以從當...

力扣 黃金礦工

你要開發一座金礦,地質勘測學家已經探明了這座金礦中的資源分布,並用大小為 m n 的網格 grid 進行了標註。每個單元格中的整數就表示這一單元格中的 數量 如果該單元格是空的,那麼就是 0。為了使收益最大化,礦工需要按以下規則來開採 每當礦工進入乙個單元,就會收集該單元格中的所有 礦工每次可以從當...