题目链接
法一(dfs)
private int rowSize, colSize;
private void dfs(char[][] board, int row, int col) {
if (row < 0 || col < 0 || row >= rowSize || col >= colSize || board[row][col] != 'O') {
return;
}
board[row][col] = '+';
dfs(board, row - 1, col);
dfs(board, row, col + 1);
dfs(board, row + 1, col);
dfs(board, row, col - 1);
return;
}
public void solve(char[][] board) {
if (board == null || board.length == 0) {
return;
}
rowSize = board.length;
colSize = board[0].length;
for (int row = 0; row < rowSize; row++) {
dfs(board, row, 0);
dfs(board, row, colSize - 1);
}
for (int col = 0; col < colSize; col++) {
dfs(board, 0, col);
dfs(board, rowSize - 1, col);
}
for (int row = 0; row < rowSize; row++) {
for (int col = 0; col < colSize; col++) {
if (board[row][col] == 'O') {
board[row][col] = 'X';
}
if (board[row][col] == '+') {
board[row][col] = 'O';
}
}
}
return;
}
本地测试
lay.showTitle(130);
Solution130 sol130 = new Solution130();
char[][] board130 = new char[][]{{'X', 'X', 'X', 'X'}, {'X', 'O', 'O', 'X'}, {'X', 'X', 'O', 'X'}, {'X', 'O', 'X', 'X'}};
arrayOpt.showCharTwoDimArray(board130, board130.length);
sol130.solve(board130);
System.out.println();
arrayOpt.showCharTwoDimArray(board130, board130.length);