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