这道题没什么说的DFS由边界开始,去不到的点即为包围的点
public class Solution {
private void check(int i, int j,char[][] board){
if(i<0||i>=board.length||j<0||j>=board[0].length||board[i][j]=='P'||board[i][j]=='X')
return;
board[i][j]='P';
//we have to jedge below, or flowout will happen
if(i-1>0 && board[i-1][j]== 'O')
check(i-1,j, board);
if(i+1<board.length && board[i+1][j]== 'O')
check(i+1,j, board);
if(j-1>0 && board[i][j-1]== 'O')
check(i,j-1, board);
if(j+1<board[0].length && board[i][j+1]== 'O')
check(i,j+1, board);
}
public void solve(char[][] board) {
if(board.length<=2 || board[0].length<=2)
return;
for(int i=0;i<board.length;i++){
for(int j=0;j<board[0].length;j++){
if((i!=0&&i!=board.length-1)&&(j!=0&&j!=board[0].length-1))
continue;
if(board[i][j]=='O'){
check(i,j, board);
//board[i][j]='u';
}
}
}
for(int i=0;i<board.length;i++){
for(int j=0;j<board[0].length;j++){
if(board[i][j]=='O'){
board[i][j]='X';
}
if(board[i][j]=='P'){
board[i][j]='O';
}
}
}
}
}