js 生成随机数独 代码
以下是生成随机数独的 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
相关文章
-
使用Nodejs爬取网页某个数据并把爬到的数据写入excel (服务端部分)
-
基于VUE Echarts 实现可视化数据大屏监控系统可视化
-
vue使用echarts画可视化大屏
-
【前端】Vue Element UI案例:通用后台管理系统-项目总结
-
解决Vue 报错error:0308010C:digital envelope routines::unsupported问题
-
基于SpringBoot和vue的若依后台管理系统 部署
-
vue项目发布有缓存,正式环境不更新(解决方案)
-
SpringBoot Vue 实现酒店客房管理系统
-
vue element ui使用选择器实现地区选择
-
Vue 项目安全扫描漏洞,JS 库版本太低,要求升级 YUI,过程总结
发布的文章
【web开发】4、JavaScript与jQuery
2024-02-01 12:02:58
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
使用Nodejs爬取网页某个数据并把爬到的数据写入excel (服务端部分)
2024-02-01 12:02:50
事件在jQuery中如何使用,JS中window.onload在jquery中的写法
2024-02-01 12:02:49
jQuery时间控件——日期选择器(Datepicker)汉化版使用详解
2024-02-01 12:02:49
jQuery表单提交的方法有多种方式
2024-02-01 12:02:49
jquery控制easyui中combobox、textbox显示隐藏
2024-02-01 12:02:49
大家推荐的文章