classSolution{boolean[][] vis;int ret,m,n;publicintgetMaximumGold(int[][] grid){
m = grid.length;
n = grid[0].length;
vis =newboolean[m][n];for(int i =0; i < m; i++)for(int j =0; j < n; j++){//剪枝if(grid[i][j]!=0&&!vis[i][j]){
vis[i][j]=true;dfs(grid,i,j,grid[i][j]);
vis[i][j]=false;//回溯}}return ret;}int[] dx ={-1,1,0,0};int[] dy ={0,0,-1,1};//这里局部变量会自己恢复现场privatevoiddfs(int[][] grid,int i,int j,int path){
ret =Math.max(ret,path);for(int k =0; k <4; k++){int x = i + dx[k];int y = j + dy[k];//剪枝if(x >=0&& x < m && y >=0&& y < n &&!vis[x][y]&& grid[x][y]!=0){
vis[x][y]=true;dfs(grid,x,y,path + grid[x][y]);
vis[x][y]=false;//回溯}}}}