
cpp
class Solution {
public:
void dfs(vector<vector<int>> &grid,int x,int y,int hang,int lie,int mark,int &size){
if(grid[x][y]==1){
grid[x][y]=mark;
size++;
if(x-1>=0){
dfs(grid,x-1,y,hang,lie,mark,size);
}
if(x+1<hang){
dfs(grid,x+1,y,hang,lie,mark,size);
}
if(y-1>=0){
dfs(grid,x,y-1,hang,lie,mark,size);
}
if(y+1<lie){
dfs(grid,x,y+1,hang,lie,mark,size);
}
}
}
int largestIsland(vector<vector<int>>& grid) {
int hang=grid.size();
int lie=grid[0].size();
int mark=2;
int res=0;
unordered_map<int,int> mp;
for(int i=0;i<hang;i++){
for(int j=0;j<lie;j++){
if(grid[i][j]==1){
int size=0;
dfs(grid,i,j,hang,lie,mark,size);
mp[mark]=size;
res=max(res,size);
mark++;
}
}
}
for(int i=0;i<hang;i++){
for(int j=0;j<lie;j++){
if(grid[i][j]==0){
unordered_set<int> land;
int sum=1;
if(i-1>=0&&grid[i-1][j]!=0){
land.insert(grid[i-1][j]);
}
if(i+1<hang&&grid[i+1][j]!=0){
land.insert(grid[i+1][j]);
}
if(j-1>=0&&grid[i][j-1]!=0){
land.insert(grid[i][j-1]);
}
if(j+1<lie&&grid[i][j+1]!=0){
land.insert(grid[i][j+1]);
}
for(auto a:land){
sum+=mp[a];
}
res=max(res,sum);
}
}
}
return res;
}
};
先标记各个岛,然后将岛屿与其面积存入map中,然后遍历0,查找在一位变0下的面积最大值