【题目描述】
给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。
找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充

【思路】
找到不在边界上的O -> 找到在边界上的O并标记 之后剩下的就是被包围的O 进行变换和还原
void solve(vector<vector<char>>& board) {
//Leetcode130:被围绕的区域
int m = board.size();
int n = board[0].size();
// 在四条边上搜索,搜索到就进行DFS
if (m <= 2 || n <= 2) {
return;
}
for (int i = 0; i < board.size(); 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] == 'O') {
board[i][j] = 'X';
}
else if (board[i][j] == 'M') {
board[i][j] = 'O';
}
}
}
}
void dfs(vector<vector<char>>& board,int i,int j) {
if ((i >= 0) && (j >= 0) && (i < board.size()) && (j < board[0].size())) { //判断i,j没有超出范围
if (board[i][j] == 'O') {
board[i][j] = 'M';
dfs(board, i + 1, j);
dfs(board, i - 1, j);
dfs(board, i, j + 1);
dfs(board, i, j - 1);
}
}
}
网友评论