最基础的搜索题,然后我忘了怎么写了。
该题目就是找连通图的最多连通的点的个数,只能上下左右四个方向连通。
class Solution {
public:
int vis[50][50];
int d[4][2]={{-1,0}, {1,0}, {0,-1}, {0,1}};
int cnt=0;
int m,n;
int maxAreaOfIsland(vector<vector<int>>& grid) {
m=grid.size();
n=grid[0].size();
int maxv=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
memset(vis,0,sizeof(vis));
if(grid[i][j]){
cnt=0;
dfs(grid, i, j);
if(cnt>maxv)
maxv=cnt;
}
}
}
return maxv;
}
void dfs(vector<vector<int>>& grid, int x, int y){
vis[x][y]=1;
cnt++;
for(int i=0;i<4;i++){
int xx=x+d[i][0];
int yy=y+d[i][1];
if(xx>=0&&xx<m&&yy>=0&&yy<n&&(vis[xx][yy]==0)&&grid[xx][yy]){
dfs(grid, xx, yy);
}
}
}
};