一个数独生成算法
思路:创建一个9*9的数独数组,挨个往里面插入1-9的数值,并且验证该数值插入是否合理,该数值插入之后是否会导致生成错误数据,最后生成一张随机数独数据
function getShuDu() {
//创建初始数组
let shudu = new Array(9);
for (let i = 0; i < 9; i++) {
shudu[i] = new Array(9).fill(0);
}
//填充数值
function tian(h,s) {
if (h == 9) {
//如果来到这 计算正确
return true;
}
if (s == 9) {
//换行计算
return tian(h + 1, 0);
}
if (shudu[h][s] != 0) {
//如果已经存在 则计算下一个
return tian(h, s+1);
}
var sum = [1, 2, 3, 4, 5, 6, 7, 8, 9];
while (sum.length > 0) {
var num = sum.splice(Math.floor(Math.random() * sum.length), 1)[0]
if (yan(h, s, num)) {
shudu[h][s] = num;
if (tian(h, s + 1)) {
return true;
}
shudu[h][s] = 0;
}
}
return false;
}
//验证填充数值是否正确
function yan(h,s,num) {
// 检查行
for (let i = 0; i < 9; i++) {
if (shudu[h][i] === num) {
return false;
}
}
// 检查列
for (let i = 0; i < 9; i++) {
if (shudu[i][s] === num) {
return false;
}
}
// 检查所在的 3x3 子网格
let startRow = Math.floor(h / 3) * 3;
let startCol = Math.floor(s / 3) * 3;
for (let i = startRow; i < startRow + 3; i++) {
for (let j = startCol; j < startCol + 3; j++) {
if (shudu[i][j] === num) {
return false;
}
}
}
return true;
}
tian(0, 0);
return shudu;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~