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
 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     }
View Code

 

posted @ 2014-02-06 15:06  krunning  阅读(218)  评论(0编辑  收藏  举报