695 - 733
695. 岛屿的最大面积
这里我用了bfs,看答案多数用bfs,其实都差不多
// 22.52
// 23.23
// bfs
class Solution {
int bfs(vector<vector<int>> & grid, int x, int y, int n, int m) {
queue<pair<int, int>> que;
que.push(pair<int, int>(x, y));
pair<int, int> tmp;
grid[x][y] = 0;
int sum = 0;
while(!que.empty()) {
tmp = que.front();
int xt = tmp.first, yt = tmp.second;
que.pop();
if(xt-1 >= 0 && grid[xt-1][yt]) {
que.push(pair<int, int>(xt-1, yt));
grid[xt-1][yt] = 0;
}
if(yt-1 >= 0 && grid[xt][yt-1]) {
grid[xt][yt-1] = 0;
que.push(pair<int, int>(xt, yt-1));
}
if(xt+1 < n && grid[xt+1][yt]) {
grid[xt+1][yt] = 0;
que.push(pair<int, int>(xt+1, yt));
}
if(yt+1 < m && grid[xt][yt+1]) {
grid[xt][yt+1] = 0;
que.push(pair<int, int>(xt, yt+1));
}
sum++;
}
return sum;
}
public:
int maxAreaOfIsland(vector<vector<int>>& grid) {
if(grid.empty()) return 0;
int n = grid.size(), m = grid[0].size();
int ans = 0;
for(int i = 0; i < n; i++) {
for(int k = 0; k < m; k++) {
if(grid[i][k]) ans = max(ans, bfs(grid, i, k, n, m));
}
}
return ans;
}
};
733. 图像渲染
做法同上,可用bfs/dfs
// 23.53
// 23.16
class Solution {
void dfs(vector<vector<int>>& image, vector<vector<int>>& visited, int i, int k, int newColor, int target) {
if(i < 0 || i >= image.size()) return ;
if(k < 0 || k >= image[0].size()) return ;
if(image[i][k] == target && !visited[i][k]) {
visited[i][k] = 1;
image[i][k] = newColor;
dfs(image, visited, i+1, k, newColor, target);
dfs(image, visited, i, k+1, newColor, target);
dfs(image, visited, i-1, k, newColor, target);
dfs(image, visited, i, k-1, newColor, target);
}
}
public:
vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int newColor) {
if(image.empty()) return image;
vector<vector<int>> visited(image.size(), vector<int>(image[0].size(), 0));
dfs(image, visited, sr, sc, newColor, image[sr][sc]);
return image;
}
};