把之前写的DFS稍微一改就过了,没有进行过多的优化,30ms,还是挺慢的
class Solution {
int res = Integer.MIN_VALUE;
int[][] dir = new int[][] { { 0, 1 }, { 0, -1 }, { 1, 0 }, { -1, 0 } };
int r;
int c;
int[][] map;
boolean[][] vis;
public int getMaximumGold(int[][] grid) {
r = grid.length;
c = grid[0].length;
map = new int[r][c];
vis = new boolean[r][c];
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
map[i][j] = grid[i][j];
}
}
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
if(map[i][j] != 0) {
vis[i][j] = true;
dfs(i, j, 0);
vis[i][j] = false;
}
}
}
return res;
}
public void dfs(int i, int j, int gold) {
res = Math.max(res, gold);
for(int[] d : dir) {
int newx = i + d[0];
int newy = j + d[1];
if(map[i][j] != 0 && newx >= 0 && newx < r && newy >= 0 && newy < c && vis[newx][newy] == false) {//在界内且未被访问
vis[newx][newy] = true;
dfs(newx, newy, gold + map[i][j]);
vis[newx][newy] = false;
}
}
return ;
}
}