130. 被围绕的区域
1 //1、从四条边出发,找到与"O"相连的,并把当前"O"置为"#" 2 //2、把"O"改为"X",把"#"改为"O" 3 class Solution 4 { 5 public: 6 void solve(vector<vector<char>>& board) 7 { 8 if (board.size() == 0 || board.size() == 0) return; 9 int m = board.size(); 10 int n = board[0].size(); 11 for (int i = 0; i < m; i++) 12 { 13 for (int j = 0; j < n; j++) 14 { 15 // 从边缘'O'开始搜索 16 bool isEdge = i == 0 || j == 0 || i == m - 1 || j == n - 1; 17 if (isEdge && board[i][j] == 'O') 18 { 19 dfs(board, i, j); 20 } 21 } 22 } 23 24 for (int i = 0; i < m; i++) 25 { 26 for (int j = 0; j < n; j++) 27 { 28 if (board[i][j] == 'O') 29 { 30 board[i][j] = 'X'; 31 } 32 if (board[i][j] == '#') 33 { 34 board[i][j] = 'O'; 35 } 36 } 37 } 38 } 39 40 void dfs(vector<vector<char>>& board, int i, int j) 41 { 42 if (i < 0 || j < 0 || i >= board.size() || j >= board[0].size() || board[i][j] == 'X' || board[i][j] == '#') 43 { 44 // board[i][j] == '#' 说明已经搜索过了. 45 return; 46 } 47 board[i][j] = '#'; 48 dfs(board, i - 1, j); // 上 49 dfs(board, i + 1, j); // 下 50 dfs(board, i, j - 1); // 左 51 dfs(board, i, j + 1); // 右 52 } 53 };
Mamba never out

浙公网安备 33010602011771号