Surrounded Regions
Given a 2D board containing 'X'
and 'O'
, capture all regions surrounded by 'X'
.
A region is captured by flipping all 'O'
s into 'X'
s in that surrounded region .
For example,
X X X X
X O O X
X X O X
X O X X
After running your function, the board should be:
X X X X
X X X X
X X X X
X O X X
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Solution { 2 public void solve(char[][] board) { 3 int row = board.length; 4 if(row<=0) return ; 5 int col = board[0].length; 6 LinkedList<Integer> indexR = new LinkedList<Integer>(); 7 LinkedList<Integer> indexC = new LinkedList<Integer>(); 8 for(int i=0;i<row;i++){ 9 if(board[i][0]=='O'){ 10 indexR.offer(i); 11 indexC.offer(0); 12 board[i][0]='P'; 13 } 14 if(board[i][col-1]=='O'){ 15 indexR.offer(i); 16 indexC.offer(col-1); 17 board[i][col-1]='P'; 18 } 19 } 20 for(int j=0;j<col;j++){ 21 if(board[0][j]=='O'){ 22 indexR.offer(0); 23 indexC.offer(j); 24 board[0][j]='P'; 25 } 26 if(board[row-1][j]=='O'){ 27 indexR.offer(row-1); 28 indexC.offer(j); 29 board[row-1][j]='P'; 30 } 31 } 32 while(!indexR.isEmpty()){ 33 int x = indexR.poll(); 34 int y = indexC.poll(); 35 if(x>0 && board[x-1][y]=='O'){ 36 indexR.offer(x-1); 37 indexC.offer(y); 38 board[x-1][y]='P'; 39 } 40 if(x<row-1 && board[x+1][y]=='O'){ 41 indexR.offer(x+1); 42 indexC.offer(y); 43 board[x+1][y]='P'; 44 } 45 if(y>0 && board[x][y-1]=='O'){ 46 indexR.offer(x); 47 indexC.offer(y-1); 48 board[x][y-1]='P'; 49 } 50 if(y<col-1 && board[x][y+1]=='O'){ 51 indexR.offer(x); 52 indexC.offer(y+1); 53 board[x][y+1]='P'; 54 } 55 } 56 for(int i=0;i<row;i++) 57 for(int j=0;j<col;j++){ 58 if(board[i][j]=='O') 59 board[i][j]='X'; 60 else if(board[i][j]=='P'){ 61 board[i][j]='O'; 62 } 63 } 64 } 65 }