105)岛屿的最大面积
dfs
class Solution{
public:
int maxAreaOfIsland(vector<vector<int>>& grid){
int res = 0;
int m = grid.size(), n = grid[0].size();
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(grid[i][j]==1){
res = max(res, dfs(grid, i, j));
}
}
}
return res;
}
int dfs(vector<vector<int>>& grid, int i, int j){
int m = grid.size(), n = grid[0].size();
if(i<0 || j<0 || i>=m || j>=n) return 0;
if(grid[i][j]==0) return 0;
grid[i][j]=0;
return dfs(grid, i+1, j) + dfs(grid, i-1, j) + dfs(grid, i, j+1) + dfs(grid, i, j-1) + 1;
}
};
106)判断二分图
class Solution{
private:
bool ok=true;
public:
bool isBipartite(vector<vector<int>>& graph){
int n = gragh.size();
vector<bool> visit(n, false);
vector<bool> color(n, false);
for(int v=0; v<n; v++){
if(!visit[v]){
traverse(graph, v, visit, color);
}
}
return ok;
}
void traverse(vector<vector<int>>& graph, int v, vector<bool>& visit, vector<bool>& color){
if(!ok) return;
visit[v] = true;
for(int w : graph[v]){
if(!visit[w]){
color[w] = !color[v];
traverse(graph, w, visit, color);
}else{
if(color[w] == color[v]){
ok = false;
}
}
}
}
};
107)矩阵中的距离
class Solution{
private:
int dir[4][2] = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}};
public:
vector<vector<int>> updateMatrix(vector<vector<int>>& mat){
int m=mat.size(), n=mat[0].size();
vector<vector<int>> dist(m, vector<int>(n));
vector<vector<int>> seen(m, vector<int>(n));
queue<pair<int, int>> q;
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(mat[i][j]==0){
q.emplace(i, j);
seen[i][j] = 1;
}
}
}
while(!q.empty()){
auto [i, j] = q.front();
q.pop();
for(int d=0; d<4; d++){
int ni = i + dir[d][0];
int nj = j + dir[d][1];
if(ni>=0 && nj>=0 && ni<m && nj<n && !seen[ni][nj]){
dist[ni][nj] = dist[i][j] + 1;
q.emplace(ni, nj);
seen[ni][nj] = 1;
}
}
}
return dist;
}
};