以下是生成随机数独的 JavaScript 代码示例:
复制
// 创建一个大小为9x9的二维数组表示数独格局 function createBoard() { const board = new Array(9); for (let i = 0; i < 9; i ) { board[i] = new Array(9); } return board; } // 检查指定位置的数字在行、列和3x3宫格里是否合法 function isValid(board, row, col, num) { // 检查行是否合法 for (let i = 0; i < 9; i ) { if (board[row][i] === num) { return false; } } // 检查列是否合法 for (let i = 0; i < 9; i ) { if (board[i][col] === num) { return false; } } // 检查3x3宫格是否合法 const startRow = Math.floor(row / 3) * 3; const startCol = Math.floor(col / 3) * 3; for (let i = 0; i < 3; i ) { for (let j = 0; j < 3; j ) { if (board[startRow i][startCol j] === num) { return false; } } } return true; } // 用回溯法生成随机数独 function generateSudoku(board, row = 0, col = 0) { if (row === 9 && col === 0) { return true; // 数独生成完成 } if (board[row][col] !== undefined) { // 当前位置已经有数字,则继续往下一个位置尝试 if (col === 8) { return generateSudoku(board, row 1, 0); } return generateSudoku(board, row, col 1); } // 尝试填充数字 for (let num = 1; num <= 9; num ) { if (isValid(board, row, col, num)) { board[row][col] = num; if (col === 8) { if (generateSudoku(board, row 1, 0)) { return true; } } else { if (generateSudoku(board, row, col 1)) { return true; } } board[row][col] = undefined; // 回溯,将当前位置的数字清空 } } return false; // 数独无解 } // 打印数独格局 function printBoard(board) { for (let i = 0; i < 9; i ) { console.log(board[i].join(" ")); } } // 生成随机数独 const board = createBoard(); generateSudoku(board); // 打印数独格局 printBoard(board);
复制
这段代码使用了回溯法来生成随机数独。首先创建一个大小为9x9的二维数组表示数独格局。然后,通过 isValid
函数来检查指定位置的数字是否合法。最后,调用 generateSudoku
函数来生成数独,并通过 printBoard
函数打印生成的数独格局。
注意:由于生成数独是一个涉及回溯的复杂操作,生成的数独可能需要一定的时间。