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

js 生成随机数独 代码

2024-01-23 17:01:29 前端知识 前端哥 899 924 我要收藏
以下是生成随机数独的 JavaScript 代码示例: ```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

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