首页 前端知识 js 生成随机数独 代码

js 生成随机数独 代码

2024-01-23 17:01:29 前端知识 前端哥 899 924 我要收藏
以下是生成随机数独的 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 函数打印生成的数独格局。

注意:由于生成数独是一个涉及回溯的复杂操作,生成的数独可能需要一定的时间。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/108.html
标签
jsAI生成
评论
发布的文章

jQuery AJAX请求的统一封装

2024-02-01 12:02:53

jQuery知识学习

2024-02-01 12:02:53

JQuery——动画效果

2024-02-01 12:02:52

jQuery复习

2024-02-01 12:02:51

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!