只有和边界相连的 OOO 不会被 XXX 包围。遍历边界,搜索边界 OOO 的连通块,标记这些连通块。最后一次遍历矩阵,将标记的格子改回 OOO ,其他格子改成 XXX ,即为所求。
提示 : 可以用数组标记连通块,也可以将连通块的字符改成没有出现过的助记符,在遍历时,将标记的格子,或者助记符改回 OOO 即可。
提示 : dx/dydx/dydx/dy 是方向数组,便于搜索操作。
class Solution {
public:vector> board;int dx[4] = {-1,0,1,0},dy[4] = {0,1,0,-1};int n ,m;void solve(vector>& _board) {board = _board;n = board.size(),m = board[0].size();for(int i = 0;iif('O'==board[i][0]) dfs(i,0);if('O'==board[i][m-1]) dfs(i,m-1);}for(int i = 0;iif('O'==board[0][i]) dfs(0,i);if('O'==board[n-1][i]) dfs(n-1,i);}for(int i = 0;iboard[x][y] = '#';for(int i = 0;i<4;i++){int a = x + dx[i], b = y + dy[i];if(a>=0&&a=0&&b
