130.Add to List 130. Surrounded Regions

 1 Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'.
 2 
 3 A region is captured by flipping all 'O's into 'X's in that surrounded region.
 4 
 5 For example,
 6 X X X X
 7 X O O X
 8 X X O X
 9 X O X X
10 After running your function, the board should be:
11 
12 X X X X
13 X X X X
14 X X X X
15 X O X X
 

 

 1 /*
 2 60 / 60 test cases passed.
 3 Status: Accepted
 4 Runtime: 13 ms
 5 */
 6 
 7 class Solution {
 8 public:
 9     void dfs(vector<vector<char>>& board, int x, int y, int r, int c, vector<vector<bool>> &visited)
10     {
11         if(!visited[x][y] && board[x][y] == 'O')
12         {
13             visited[x][y] = true;
14             board[x][y] = '#';
15             if((x > 0) && (!visited[x-1][y]) && (board[x-1][y] == 'O')) dfs(board, x-1, y, r, c, visited); // top
16             if((x+1 < r) && (!visited[x+1][y]) && (board[x+1][y] == 'O')) dfs(board, x+1, y, r, c, visited); // bottom
17             if((y > 1) && (!visited[x][y-1]) && (board[x][y-1] == 'O')) dfs(board, x, y-1, r, c, visited); // left   ??? why "y > 0" can't pass the last test case.
18             if((y+1 < c) && (!visited[x][y+1]) && (board[x][y+1] == 'O')) dfs(board, x, y+1, r, c, visited); // right
19         }
20         return;
21     }
22 
23     void solve(vector<vector<char>>& board)
24     {
25         size_t rlen = board.size();
26         if(0 == rlen) return;
27         size_t clen = board[0].size();
28 
29         cout << board.size() << " " << board[0].size() << endl;
30         vector<vector<bool>> visited(rlen, vector<bool>(clen, false));
31 
32         for(int i=0; i<clen; i++) dfs(board, 0, i, rlen, clen, visited); // top
33         for(int j=0; j<clen; j++) dfs(board, rlen-1, j, rlen, clen, visited); // bottom
34         for(int m=0; m<rlen; m++) dfs(board, m, 0, rlen, clen, visited); // left
35         for(int n=0; n<rlen; n++) dfs(board, n, clen-1, rlen, clen, visited); // right
36 
37         for(int i = 0; i < rlen; i++)
38             for(int j = 0; j < clen; j++)
39             {
40                 if(board[i][j] == 'O')
41                     board[i][j] = 'X';
42                 if(board[i][j] == '#')
43                     board[i][j] = 'O';
44             }         
45     }
46 
47 };
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-03-03
  • 2022-12-23
  • 2021-09-12
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-30
  • 2021-06-02
  • 2021-07-28
  • 2021-11-12
  • 2021-10-09
  • 2021-05-18
  • 2021-08-29
相关资源
相似解决方案