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 };

 

posted @ 2020-04-02 10:59  Jinxiaobo0509  阅读(161)  评论(0)    收藏  举报