作者:用户89e44snpn5 | 来源:互联网 | 2023-10-13 20:28
现在有一个仅包含‘X’和‘O’的二维板,请捕获所有的被‘X’包围的区域捕获一个被包围区域的方法是将被包围区域中的所有‘O’变成‘X’例如XXXXXOOXXXOXOXXX执行完你给出
现在有一个仅包含‘X’和‘O’的二维板,请捕获所有的被‘X’包围的区域
捕获一个被包围区域的方法是将被包围区域中的所有‘O’变成‘X’
例如
X X X X
X O O X
X X O X
O X X X
执行完你给出的函数以后,这个二维板应该变成:
X X X X
X X X X
X X X X
O X X X
解析:
/*
* 所有与四条边相连的O都保留,其他O都变为X
遍历四条边上的O,并深度遍历与其相连的O,将这些O都转为
* 将剩余的O变为X
将剩余的变为O
*/
public int rowNum = 0;
public int colNum = 0;
public void solve(char[][] board) {
if(board == null || board.length <= 0|| board[0].length <= 0){
return;
}
rowNum = board.length;
colNum = board[0].length;
for(int i = 0; i
dfs(board, 0, i);
dfs(board, rowNum-1, i);
}
for(int i = 0; i
dfs(board, i, 0);
dfs(board, i, colNum-1);
}
for(int i = 0; i
for(int j = 0; j
if(board[i][j] == 'O'){
board[i][j] = 'X';
}
}
}
for(int i = 0; i
for(int j = 0; j
if(board[i][j] == '*'){
board[i][j] = 'O';
}
}
}
}
private void dfs(char[][] board, int row, int col) {
// TODO Auto-generated method stub
if(board[row][col] == 'O'){
board[row][col] = '*';
if(row > 1){
dfs(board, row-1, col);
}
if(col > 1){
dfs(board, row, col-1);
}
if(row
dfs(board, row+1, col);
}
if(col
dfs(board, row, col+1);
}
}
}