题目:
代码(首刷看解析 2024年3月19日):
class Solution {
public:
int count;
int dir[4][2] = {1,0,-1,0,0,1,0,-1};
void dfs(vector<vector<int>>& grid, vector<vector<bool>>& visited, int row, int col, int mark)
{
if(visited[row][col]) return;
visited[row][col] = true;
grid[row][col] = mark;
count++;
for (int i = 0; i < 4; ++i)
{
int newrow = row + dir[i][0];
int newcol = col + dir[i][1];
if (newrow < 0 || newrow >= grid.size() || newcol < 0 || newcol >= grid[0].size()) continue;
if (grid[newrow][newcol] == 0) continue;
dfs(grid, visited, newrow, newcol, mark);
}
}
int largestIsland(vector<vector<int>>& grid) {
int n = grid.size();
vector<vector<bool>> visited(n, vector<bool>(n, false));
unordered_map<int, int> gridNum;
int mark = 2;
bool isAllgrid = true;
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
if (grid[i][j] == 0) isAllgrid = false;
if (!visited[i][j] && grid[i][j] == 1)
{
count = 0;
dfs(grid, visited, i, j, mark);
gridNum[mark] = count;
mark++;
}
}
}
if (isAllgrid == true) return n*n;
int result = 0;
unordered_set<int> visitedGrid;
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
if (grid[i][j] == 0)
{
int temp = 1;
visitedGrid.clear();
for (int k = 0; k < 4; ++k)
{
int newrow = i + dir[k][0];
int newcol = j + dir[k][1];
if (newrow < 0 || newrow >= grid.size() || newcol < 0 || newcol >= grid[0].size()) continue;
if (visitedGrid.find(grid[newrow][newcol]) != visitedGrid.end()) continue;
visitedGrid.insert(grid[newrow][newcol]);
temp += gridNum[grid[newrow][newcol]];
}
result = max(result, temp);
}
}
}
return result;
}
};