LeetCode-Surrounded Regions
来源:互联网 发布:网站编程语言排行 编辑:程序博客网 时间:2024/05/14 00:01
class Solution {public: void solve(vector<vector<char>> &board) { // Start typing your C/C++ solution below // DO NOT write int main() function if (board.size() == 0 || board[0].size() == 0) { return; } for (int i = 0; i < board.size(); ++i) { bfs(i, 0, board); bfs(i, board[0].size() - 1, board); } for (int j = 1; j < board[0].size() - 1; ++j) { bfs(0, j, board); bfs(board.size() - 1, j, board); } for (int i = 0; i < board.size(); ++i) for (int j = 0; j < board[0].size(); ++j) if (board[i][j] == 'O') board[i][j] = 'X'; else if (board[i][j] == 'S') board[i][j] = 'O'; } void bfs(int row, int col, vector<vector<char> > &board) { queue<pair<int, int> > Q; fill(row, col, board, Q); while (!Q.empty()) { pair<int, int> cor = Q.front(); Q.pop(); fill(cor.first - 1, cor.second, board, Q); fill(cor.first + 1, cor.second, board, Q); fill(cor.first, cor.second - 1, board, Q); fill(cor.first, cor.second + 1, board, Q); } } void fill(int row, int col, vector<vector<char> > &board, queue<pair<int, int> > &Q) { if (row < 0 || row >= board.size() || col < 0 || col >= board[0].size() || board[row][col] != 'O') { return; } board[row][col] = 'S'; Q.push(make_pair(row, col)); }};