LeetCode 130. Surrounded Regions
Solution1:我的答案
利用bfs解决,超过98.7%的答案,还不错。关键是简单易懂!
class Solution {
public:
void solve(vector<vector<char>>& board) {
if (!board.size() || !board[0].size()) return;
int m = board.size(), n = board[0].size();
vector<vector<int> > mark(m, vector<int> (n, 0));
for (int i = 0; i < n; i++) //首行
if (board[0][i] == 'O')
bfs(board, mark, 0, i);
for (int i = 0; i < m; i++) //末列
if (board[i][n - 1] == 'O')
bfs(board, mark, i, n - 1);
for (int i = 0; i < n; i++) //末行
if (board[m - 1][i] == 'O')
bfs(board, mark, m - 1, i);
for (int i = 0; i < m; i++) //首列
if (board[i][0] == 'O')
bfs(board, mark, i, 0);
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (!mark[i][j])
board[i][j] = 'X';
return;
}
private:
void bfs(vector<vector<char>>& board, vector<vector<int> >& mark,
int i, int j) {
if (i < 0 || i >= board.size() || j < 0 || j >= board[0].size())
return;
else if (mark[i][j] || board[i][j] == 'X')
return;
else if (board[i][j] == 'O') {
mark[i][j] = 1;
bfs(board, mark, i, j + 1);
bfs(board, mark, i, j - 1);
bfs(board, mark, i - 1, j);
bfs(board, mark, i + 1, j);
}
}
};