1 typedef long long ll; 2 typedef pair<int,int> P; 3 #define _for(i,a,b) for(register int i = (a);i < b;i ++) 4 #define _rep(i,a,b) for(register int i = (a);i > b;i --) 5 #define INF 0x3f3f3f3f 6 #define MOD 100000000 7 #define maxn 10003 8 9 const int dx[] = {1,-1,0,0}; 10 const int dy[] = {0,0,1,-1}; 11 class Solution 12 { 13 public: 14 15 int vis[100][100]; 16 vector<vector<int>> v; 17 int ans = 0; 18 bool valid(int x,int y) 19 { 20 return x>=0 && x<v.size() && y>=0 && y<v[0].size(); 21 } 22 void dfs(int x,int y,int get) 23 { 24 ans = max(ans,get); 25 _for(i,0,4) 26 { 27 int nx = x+dx[i]; 28 int ny = y+dy[i]; 29 if(valid(nx,ny) && !vis[nx][ny] && v[nx][ny]) 30 { 31 vis[nx][ny] = 1; 32 dfs(nx,ny,get+v[nx][ny]); 33 vis[nx][ny] = 0; 34 } 35 } 36 } 37 int getMaximumGold(vector<vector<int>>& grid) 38 { 39 v = grid; 40 _for(i,0,grid.size()) 41 _for(j,0,grid[i].size()) 42 if(v[i][j]) 43 { 44 memset(vis,0,sizeof(vis)); 45 vis[i][j] = 1; 46 dfs(i,j,v[i][j]); 47 } 48 return ans; 49 } 50 };