class Solution { public: int xx[4]={0,0,1,-1}; int yy[4]={1,-1,0,0}; int m,n; //vector<vector<bool>> st(16,vector<bool>(16,false)); bool st[16][16]; int getMaximumGold(vector<vector<int>>& grid) { int ans=0; m=grid.size(),n=grid[0].size(); memset(st,false,sizeof st); for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ st[i][j]=true; if(grid[i][j]!=0)ans=max(ans,dfs(i,j,grid)); st[i][j]=false; } } return ans; } int dfs(int x,int y,vector<vector<int>>& grid){ int tmp=grid[x][y]; for(int i=0;i<4;i++){ int dx=x+xx[i]; int dy=y+yy[i]; if(dx>=0&&dy>=0&&dx<m&&dy<n&&grid[dx][dy]!=0&&st[dx][dy]==false){ st[dx][dy]=true; tmp=max(tmp,grid[x][y]+dfs(dx,dy,grid)); st[dx][dy]=false; } } return tmp; } };