你要開發一座金礦,地質勘測學家已經探明了這座金礦中的資源分布,並用大小為 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。為了使收益最大化,礦工需要按以下規則來開採 每當礦工進入乙個單元,就會收集該單元格中的所有 礦工每次可以從當...