package com.bupt.acm.leetcode;
public class SurroundedRegions {
public void solve(char[][] board){
boolean up,down,left,right;
for(int i=1;i<board.length-1;i++){
for(int j=1;j<board[0].length-1;j++){
up=down=left=right=false;
if(board[i][j]=='O'){
//全是true,表示o可以反转为x
up=up(board,i,j);
if(!up)
continue;
down=down(board,i,j);
if(!down)
continue;
left=left(board,i,j);
if(!left)
continue;
right=right(board,i,j);
if(!right)
continue;
board[i][j]='X';
}
}
}
}
//按行up:down
public boolean up(char[][] board,int row,int col){
if(board[row-1][col]=='O')
return false;
return true;
}
public boolean down(char[][] board,int row,int col){
for(int i=row+1;i<board.length;i++){
if(board[i][col]=='X')
return true;
}
return false;
}
//按列 left:right
public boolean left(char[][] board,int row,int col){
if(board[row][col-1]=='O'){
return false;
}
return true;
}
public boolean right(char[][] board,int row,int col){
for(int i=col+1;i<board[0].length;i++){
if(board[row][i]=='X')
return true;
}
return false;
}
public static void main(String[] args){
char[][] board={{'X','X','X'},{'X','O','X'},{'X','X','X'}};
for(int i=0;i<board.length;i++){
for(int j=0;j<board.length;j++)
System.out.print(board[i][j]+" ");
System.out.println();
}
System.out.println("---------------------");
SurroundedRegions su=new SurroundedRegions();
su.solve(board);
for(int i=0;i<board.length;i++){
for(int j=0;j<board.length;j++)
System.out.print(board[i][j]+" ");
System.out.println();
}
}
}