# Leetcode 1219. Path with Maximum Gold
# DFS
Runtime: 20 ms
faster than 63.31%
Memory Usage: 36.2 MB
less than 94.78%
``` java=
class Solution {
// 四個 DFS 可以探尋的方向
int[][] direction=new int[][]{{0,1},{0,-1},{1,0},{-1,0}};
public int getMaximumGold(int[][] grid) {
int result=0;
/*
陣列值 arr[i][j] 表示指定的是第 i 列第 j 行的值。在使用二維陣列物件時,注意 length 所代表的長度,
陣列名稱後直接加上 length(如 arr.length),所指的是有幾列(Row);指定索引後加上 length(如 arr[0].length),
指的是該列所擁有的元素,也就是行(Column)數目。 */
for(int r=0;r<grid.length;r++){
for(int c=0;c<grid[0].length;c++){
// 若非0,則深度探索
if(grid[r][c]!=0){
result=Math.max(result, dfs(grid, r, c));
}
}
}
return result;
}
public int dfs(int[][] grid, int row, int col){
int current=grid[row][col];
int maxPath=0;
// 已存入current,設為0以免走回頭路
grid[row][col]=0;
for(int[] dir : direction){
int nextRow=row+dir[0], nextCol=col+dir[1];
// 若下一步超出地圖,則跳過
if(nextRow<0 || nextRow>=grid.length ||
nextCol<0 || nextCol>=grid[0].length || grid[nextRow][nextCol]==0){
continue;
}
else{
// 遞迴去求出最深的路
maxPath=Math.max(maxPath, dfs(grid, nextRow, nextCol));
}
}
// 若不復原,會影響其他dfs路線的計算
grid[row][col]=current;
return current+maxPath;
}
}
/*
陣列值 arr[i][j] 表示指定的是第 i 列第 j 行的值。在使用二維陣列物件時,注意 length 所代表的長度,
陣列名稱後直接加上 length(如 arr.length),所指的是有幾列(Row);指定索引後加上 length(如 arr[0].length),
指的是該列所擁有的元素,也就是行(Column)數目。 */
```
解題思維:
DFS=>深度優先搜尋法
典型DFS題目
###### tags: `DFS` `遞迴` `Array`