图:Flood Fill
睡不醒的鲤鱼 2022-05-16 每日一题 LeetCode
# 0130. 被围绕的区域 (opens new window)
题目
给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。
从四周向中间 DFS,将所有与最外层 O 相连通的区域标记,最后将剩余的 O 更改为 X。
代码
class Solution {
int m, n;
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, -1, 0, 1};
public:
void solve(vector<vector<char>>& board) {
m = board.size(), n = board[0].size();
for (int i = 0; i < m; i++) {
if (board[i][0] == 'O') dfs(board, i, 0);
if (board[i][n - 1] == 'O') dfs(board, i, n - 1);
}
for (int j = 0; j < n; j++) {
if (board[0][j] == 'O') dfs(board, 0, j);
if (board[m - 1][j] == 'O') dfs(board, m - 1, j);
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (board[i][j] == '#') board[i][j] = 'O';
else board[i][j] = 'X';
}
}
}
void dfs(vector<vector<char>>& board, int x, int y) {
board[x][y] = '#';
for (int i = 0; i < 4; i++) {
int nx = x + dx[i], ny = y + dy[i];
if (nx >= 0 && nx < m && ny >= 0 && ny < n && board[nx][ny] == 'O') {
dfs(board, nx, ny);
}
}
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 0200. 岛屿数量 (opens new window)
题目
解析
代码
# 0286. 墙与门 (opens new window)
题目
解析
代码
# 0317. 离建筑物最近的距离 (opens new window)
题目
解析
代码
# 0329. 矩阵中的最长递增路径 (opens new window)
题目
解析
代码
# 0407. 接雨水 II (opens new window)
题目
解析
代码
# 0417. 太平洋大西洋水流问题 (opens new window)
题目
解析
代码
# 0489. 扫地机器人 (opens new window)
题目
解析
代码
# 0490. 迷宫 (opens new window)
题目
解析
代码
# 0499. 迷宫 III (opens new window)
题目
解析
代码
# 0505. 迷宫 II (opens new window)
题目
解析
代码
# 0529. 扫雷游戏 (opens new window)
题目
解析
代码
# 0542. 01 矩阵 (opens new window)
题目
解析
代码
# 0576. 出界的路径数 (opens new window)
题目
解析
代码