DFS与BFS 解释: BFS 齐头并进利用队列; DFS 则是递归回溯后续遍历
let board = [["O", "O", "O", "X"], ["O", "X", "X", "X"], ["X", "O", "O", "X"], ["X", "X", "X", "O"]]
let rowsL = board.length, colsL = board[0].length;
function solve(board) {
if (!board.length) return;
let arr = []
for (let i = 0; i < rowsL; ++i) {
if (board[i][0] == 'O') { arr.push([i, 0]) }
if (board[i][colsL - 1] == 'O') {
arr.push([i, colsL - 1])
}
}
for (let i = 0; i < colsL; ++i) {
if (board[0][i] == 'O') { arr.push([0, i]) }
if (board[rowsL - 1][i] == 'O') { arr.push([rowsL - 1, i]) }
}
for (let index = 0; index < arr.length; index++) {
dfs(arr[index])
}
for (let i = 0; i < rowsL; ++i) {
for (let j = 0; j < colsL; ++j) {
if (board[i][j] == 'O') board[i][j] = 'X';
if (board[i][j] == '#') board[i][j] = 'O';
}
}
}
solve(board)
function dfs(arrIndex) {
const row = arrIndex[0], col = arrIndex[1]
if (row < 0 || row == rowsL || col < 0 || col == colsL || board[row][col] != 'O') return;
board[row][col] = '#';
dfs([row + 1, col]);
dfs([row - 1, col]);
dfs([row, col + 1]);
dfs([row, col - 1]);
}
function bfs(arrIndex) {
let q = [arrIndex]
while (q.length) {
const qIndex = q.shift()
const row = qIndex[0], col = qIndex[1]
if (row < 0 || row == rowsL || col < 0 || col == colsL || board[row][col] != 'O') continue;
board[row][col] = '#';
q.push([row + 1, col])
q.push([row - 1, col])
q.push([row, col + 1])
q.push([row, col - 1])
}
}
console.log(board);