首页 > 编程语言 >一个数独生成算法

一个数独生成算法

时间:2024-09-02 14:46:58浏览次数:10  
标签:return ++ shudu 生成 tian 算法 num let 数独

思路:创建一个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;

}

标签:return,++,shudu,生成,tian,算法,num,let,数独
From: https://www.cnblogs.com/mufuhu/p/18392713

相关文章

  • LaViT:这也行,微软提出直接用上一层的注意力权重生成当前层的注意力权重 | CVPR 2024
    Less-AttentionVisionTransformer利用了在多头自注意力(MHSA)块中计算的依赖关系,通过重复使用先前MSA块的注意力来绕过注意力计算,还额外增加了一个简单的保持对角性的损失函数,旨在促进注意力矩阵在表示标记之间关系方面的预期行为。该架构你能有效地捕捉了跨标记的关联,超越了基线......
  • 书籍-《空间导航与跟踪:分析与算法》
    编辑:陈萍萍的公主@一点人工一点智能书籍:NavigationandTrackinginSpace:AnalysisandAlgorithms作者:SanatK.Biswas,AndrewG.Dempster出版:ArtechHouse01书籍介绍本书专注于人造空间物体的导航与跟踪,重点是对一系列广泛的空间任务进行动力学建模,包括:地球轨道卫星任务、发射......
  • java+vue计算机毕设学生成绩管理系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着教育信息化的快速发展,传统的手工管理学生成绩的方式已难以满足现代教学管理的需求。学校规模的扩大、学生数量的增加以及课程设置的多样化,使得成......
  • 分布式概念及选举算法
    概念  由很多自主的计算机组成。很容易地把运行在不同计算机上的不同应用程序集成到单个系统中。清晰的记录接口。轻松的扩展。分布式类型:分布式计算系统、分布式信息系统(数据处理)互斥    集中式算法      每个程序在需要访问临界资源时,先给协调......
  • 基于FP-Growth算法进行数据集中频繁项集挖掘
    FP-Growth算法的主要步骤构建FP树(FrequentPatternTree):首先,扫描数据集一次,找出频繁项,并按支持度降序排列。然后,构建FP树,这是一个压缩表示的数据结构,其中每个项集对应树中的一个路径。挖掘FP树:从FP树中递归地挖掘频繁项集。这个过程通常从支持度最低的频繁项开始,逐步向上挖掘......
  • 基于C语言的选择排序算法
    一、选择排序算法的基本原理        选择排序算法是一种简单直观的排序算法。其基本原理为:        首先,将待排序的数组划分为已排序和未排序两部分。初始时,已排序部分为空,未排序部分为整个数组。        在每一轮排序中,从未排序部分找出最小(或最大)......
  • 基于C语言的归并排序算法
    一、归并排序的基本概念        归并排序(MergeSort)是一种基于分治法思想的高效稳定排序算法。其基本原理是将一个待排序的数组不断地分割成较小的子数组,直到每个子数组只包含一个元素,此时每个子数组都被认为是有序的。然后,再将这些有序的子数组合并成一个更大的有序......
  • 求从一固定点到其余点的最短路算法及其matlab程序详解
    #################本文为学习《图论算法及其MATLAB实现》的学习笔记#################算法用途从一固定点到其他所有点的最短路的求法算法思想利用求任意两点间最短路的程序,即可求出从固定点到其他所有点的最短路,从而得到所有的最短路和最短距离。若想查看每条通路所包......
  • 排序算法之二叉树排序详细解读(附带Java代码解读)
    二叉树排序(BinaryTreeSort)是一种基于二叉搜索树(BinarySearchTree,BST)实现的排序算法。它的基本思想是利用二叉搜索树的性质来实现排序,通过将元素插入到二叉搜索树中,然后对树进行中序遍历来获取排序后的元素。基本概念二叉搜索树(BST):对于二叉搜索树中的每一个节点,其左......
  • 安全帽ai自动识别算法
    安全帽ai自动识别算法是人工智能与视觉系统算法技术性的结合。通过10年的工艺累积,SuiJivision具备深层次的人工智能自主学习、图像识别、行为分析、发展趋势认知、风险预警等工作能力,安全帽ai自动识别算法可以根据认知情景动态性、即时解析和管理方法情景个人行为来预知未来的风......