// 一刷
// 自己做出(O);看答案()
// 1. Accepted
class Solution {
public:
int getMaximumGold(vector<vector<int>>& grid) {
if (grid.size() == 0 || grid[0].size() == 0) return 0;
for (int i = 0; i < grid.size(); i++) {
for (int j = 0; j < grid[0].size(); j++) {
dfs(grid, i, j, 0);
}
}
return res;
}
void dfs(vector<vector<int>>& grid, int i, int j, int sum) {
if (i < 0 || i >= grid.size() || j < 0 || j >= grid[0].size() || grid[i][j] == 0) {
res = max(res, sum);
return;
}
sum += grid[i][j];
int tmp = grid[i][j];
grid[i][j] = 0;
dfs(grid, i + 1, j, sum);
dfs(grid, i - 1, j, sum);
dfs(grid, i, j + 1, sum);
dfs(grid, i, j - 1, sum);
grid[i][j] = tmp;
}
private:
int res = 0;
};