数独问题(工具)

数独生成算法设计与实现分析报告 本文探讨了数独生成算法的设计与实现。采用递归回溯法生成合法终盘,结合随机洗牌确保多样性,通过"挖孔法"控制提示数数量实现简单(39-42)、中等(32-35)、困难(24-28)三级难度。算法解决了随机性不足、视觉呈现混乱等问题,并优化了打印格式。虽然当前版本未严格验证唯一解,但通过控制提示数规避了多解风险。测试表明算法性能良好,生成时间在毫秒级。改进方向包括增加唯一解验证、对称挖孔和智能难度评估。该算法适用于游戏开发、教育工具等领域,展示了回溯法在约束满足问题中的实用价值。 阅读详情

功能:

  • 输入一个数独(用二维数组表示),求出数独的解。

效果图:

这里写图片描述这里写图片描述


实现原理:

  • DFS搜索遍历。
  • 二维数组储存数据。

源代码:

#include<iostream>
#include<cstring>
#include<cstring>
#include<cstdio>
using namespace std;

int data[112][112];

void put()
{
    cout << "----------------------" << endl;
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            cout << data[i][j] << " ";
            if ((j+1)%3 == 0)
                cout << " ";
        }
        cout << endl;
        if ((i+1)%3 == 0)
            cout << endl;
    }
    cout << "----------------------" << endl;
}


bool check(int x, int y)
{
    for (int i = 0; i <= 9; i++)
    {
        if (data[i][y] == data[x][y] && i != x)
            return false;
        if (data[x][i] == data[x][y] && i != y)
            return false;
    }

    int x0 = x/3*3;
    int y0 = y/3*3;

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            if (i+x0 == x && j+y0 == y)
                continue;
            if (data[i+x0][j+y0] == data[x][y])
                return false;
        }
    }

    return true;
}

int fun(int cnt)
{
    int x, y;
    if (cnt == 81)
        return 1;

    x = cnt/9;
    y = cnt%9;


    if (data[x][y] != 0)
    {
        fun(cnt+1);
    }
    else
    {
        for (int i = 1; i <= 9; i++)
        {
            data[x][y] = i;
            if (check(x, y))
            {
                if(fun(cnt+1))
                    return 1;
            }
        }
        data[x][y] = 0;
        return 0;
    }
}

int main()
{
    int n, x, y, t;
    while (cin >> n)
    {
        memset(data, 0, sizeof(data));
        for (int i = 0; i < n; i++)
        {
            cin >> x >> y >> t;
            data[x-1][y-1] = t;
        }
        fun(0);
        cout << "end" << endl;
        put();
    }
}

PS:

当初群里有人问一个数独怎么解时,然后自己DFS也不太熟练,花了半个小时写了这个,满满的成就感!

软件工程大作业——数独游戏2 软件工程大作业——数独游戏2 一、PSP表格 二、问题分析 三、系统设计 四、具体实现 五、单元测试 六、程序性能及质量分析 七、GUI 八、总结 代码地址:https://github.com/friyal0730/sudoku/ 这篇文章主要是第四部分具体实现、第五部分单元测试和第六部分程序性能及质量分析 四、具体实现 Check.h:负责对用户输入的命令进行处理,如果命令输入错误,进... 阅读详情

相关推荐

数独自动求解工具开发与实战:结果保存至“我的文档”

数独自动求解器的核心功能是接收一个合法的数独谜题作为输入,并输出其唯一解(或多个可能的解,取决于谜题的设定)。实现该功能的关键在于算法的正确性和效率。通常,回溯法和分支限界法是主流选择,它们能够有效处理不同难度的数独谜题。

weixin_35751194的博客 1189

ACM Sudoku

Sudoku是一个非常简单的任务。 具有9行9列的方形表被划分为9个较小的正方形3x3,如图所示。 在一些单元格中写入从1到9的十进制数字。其他单元格为空。 目标是填充空单元格,其中十进制数字从1到9,每个单元格一个数字,使得每行中每列和每个标记的3x3子方格中的所有数字将显示为1到9。 编写程序来解决给定的数独任务。 Input 输入数据将以测试用例的数量开始。 对于每个测试用例,跟随9...

weixin_30675247的博客 167

思维导图与数独:学习的艺术

本文介绍了两种提高思维能力的方法:制作思维导图和解决数独谜题。思维导图通过色彩和图像帮助记忆和组织信息,而数独谜题则通过逻辑推理训练大脑。两种方法都强调了逻辑思维和创造性思考的重要性,以及如何将这些技能应用于日常生活和学习。

weixin_42581846的博客 420

数独问题

一、问题描述数独(Sudoku)是一款大众喜爱的数字逻辑游戏。玩家需要根据9X9盘面上的已知数字,推算出所有剩余空格的数字,并且满足每一行、每一列、每一个粗线宫内的数字均含1-9,并且不重复。输入:包含已知数字的9X9盘面数组[空缺位以数字0表示]输出:完整的9X9盘面数组输入描述:包含已知数字的9X9盘面数组[空缺位以数字0表示]输出描述:完整的9X9盘面数组输入例子:0 9 2 4 8 1 7

na_beginning的专栏 1750

数独求解 ACM C++算法 用时0到7ms

跟普通深度遍历不同,这是自动选择可能性最大的格子进行深度遍历的非递归算法,使用了栈进行实现。其中每个节点的结构体的数据结构还可以优化一点,但是内存开销已经很小了。

数独验证器_sudoku验证器_数独验证_数独_

数独验证器

【操作系统作业】数独解决方案验证器(利用多线程解决)

文章目录一、题目二、设计思路三、代码四、总结 一、题目 数独谜题使用 9×9 的网格,其中每一列和每一行以及每 3×3 子网格中的每 一个子网格必须包含所有数字 1···9。 图 1 给出了一个有效的数独游戏示例。 这个项目包括设计多线程应用程序来确定数独谜题的解决是否有效。 这个多线程应用程序有几种不同的设计。一种建议的策略是创建检查以下条 件的线程: 一个线程,检查每列包含数字 1 到 9 一个线程,检查每行包含数字 1 到 9 9个线程来检查 3×3 子网格中的每个子网格是否包含数字 1 到 9这

风过孤屿,山海自成诗行。 6461

MuJoCo新手必看:5分钟搞定你的第一个机器人仿真(附Python代码)

本文为零基础新手提供了一份详尽的MuJoCo物理仿真引擎入门指南。从环境搭建、MJCF模型文件解析,到编写Python控制代码,手把手教你5分钟内创建并运行第一个机器人仿真。内容涵盖双摆模型控制与自定义四轮小车构建,帮助你快速掌握这一高性能开源工具,迈出机器人学与强化学习仿真的第一步。

weixin_29032489的博客 654

php 数独计算器,问题描述:数独(Sudoku)是一款大众喜爱的数字逻辑游戏。玩家需要根据9X9盘面上的已知数字_题来了...

这题答案不唯一的。系统给的答案:我的代码测出的答案:代码如下:#include using namespace std;bool sign = false;int num[9][9];void Output(){for (int i = 0; i < 9; i++){for (int j = 0; j < 8; j++)cout << num[i][j] << ...

weixin_39989033的博客 410

语音测试(二)音频标注(praat)

通过点击红线下方的圆点进行区域划分,在区域中标注所属的类别。按住Alt+Backspace 键取消蓝色线条。

beishida123的博客 3733

WSL2 + Open3D点云可视化踩坑全记录:从GLFW报错到VcXsrv配置,一篇讲清所有‘坑’

本文详细解析了在WSL2环境中使用Open3D进行点云可视化时遇到的常见问题,特别是GLFW报错和VcXsrv配置问题。通过系统性的解决方案和高级配置技巧,帮助开发者彻底解决图形显示、驱动加载和库版本冲突等难题,实现高效的点云可视化。

weixin_30627341的博客 100

利用Matlab优化工具箱解数独问题

前一阵使用Matlab的优化工具箱,发现可以求解数独问题,有意思!实际上,Matlab优化工具箱有两个:Optimization Toolbox和Global Optimization Toolbox,前者求解常见的优化问题,后者求解全局最优问题,如常见的方法包括遗传算法、粒子群算法、模拟退火算法等。     而数独问题则是借助Optimization Toolbox工具箱的整数线性规划函数

GarfieldEr007的专栏 1万+

张量分解浅谈(四 Tucker 分解)

学完了SVD算法之后,我们继续回到张量几大分解的学习上来,本期学习的主要内容是张量的 Tucker 分解 以及 前面的CP分解还留下一点没有说完,正好一并补齐!后面的公式我将采用颜色标记,红色代表必须掌握,蓝色尽量掌握! 在这之前先附一张图,包含了各种运算符号的名称含义,大部分是前面说过或者使用过的: Tensor decomposition一 . Tucker 分解公式介绍和原理二 . 张量的 n-Rank 一 . Tucker 分解公式介绍和原理 我们先来看一张被使用过很多次的Trucker 分解图

欢迎来到 豪哥 的博客 1万+

2019/11/04【解数独】

题目一:【解数独】力扣——37 编写一个程序,通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则: 数字1-9在每一行只能出现一次。 数字1-9在每一列只能出现一次。 数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。 空白格用'.'表示。 一个数独。 答案被标成红色。 Note: 给定的数独序列只包含数字1-9和字符'.'。 你...

weixin_43428906的博客 720

对称加密中GCM和CBC俩种加密模式的区别

**CBC(Cipher Block Chaining)** 和 **GCM(Galois/Counter Mode)** 是两种常见的对称加密模式。它们的主要区别体现在加密方式、性能和安全性上。

闲人 1107

团体程序设计天梯赛竞赛题--登顶题【L3-042 污染大亨】

登顶级 3 道题,每道题 30 分,满分为 90 分。

Pretty Boy Fox的博客 1361

数独问题流程图_软件工程基础大项目——数独问题

Github项目地址:https://github.com/WX78yyj/sudoku(由于自己有不爱命名的坏习惯,所以忘记命名了,结果提交的文件名称是未命名3,发现还改不了,郁闷)PSP2.1Personal Software ProcessStages预估耗时(分钟)实际耗时(分钟)Planning计划60Estimate估计这个任务需要多长时间15Development开发400Anal...

weixin_31659249的博客 293

【目标跟踪】多目标跟踪的评价工具motmetrics怎么使用?

多目标跟踪,通过motmetrics测试评价对应的视频。

聿默的博客 5368

利用python解决简单数独

本来打算利用pyautogui实现完全的自动化的。但是考虑到不同的网页的数独呈现方式的差异可能会使得程序的局限性更大。于是采用了一种麻烦一点,但可以接受的方式进行数据输入。但是之后的思考模式代码化就不是很容易了。不过笔者并不算十分忠实的数独玩家,但数独是一种规则和形式都十分简单的游戏。以上代码还有诸多不足,有很多看上去多余的部分是留着给更复杂的判断方式的。所以最终的结果大概算是一个半成品,但已经能解决比较基本的数独。用0来代表未知的数字,其他的数字则表示已知数字。于是萌生了用python来解决数独的想法。

jingzhiyang的博客 3437

(建议收藏)2024最新 URL Scheme大全APP跳转界面地址更新中 ios快捷指令快捷方式链接跳转微信小程序必备autojs可用免root (可定制开发和提取URL Scheme 参数提取)

(建议收藏)2024最新 URL Scheme大全APP跳转界面地址更新中 ios快捷指令快捷方式链接跳转微信小程序必备autojs可用免root (可定制开发和提取URL Scheme 参数提取)

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

mapreduce数独实例(sudoku)

数独百科 puzzle1.dta 8 5 ? 3 9 ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? 6 ? 1 ? ? ? 2 ? ? 4 ? ? 3 ? 5 9 ? ? 8 9 ? 1 4 ? ? 3 2 ? 4 ? ? 8 ? ? 9 ? ? ? 8 ? 5 ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? 4 5 ? 7 8 mapreduce求解 hadoop j...

qq_42304949的博客 1212

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

数独检查器无法工作?谁能帮我识别错误?

如果你的数独检查器无法工作,可能有以下几个常见的原因: 1. 逻辑错误:检查你的数独检查器的逻辑是否正确。确保你正确地检查了每行、每列和每个九宫格中的数字是否唯一。 2. 边界情况:考虑一些特殊的边界情况,例如空单元格、重复数字或不符合数独规则的情况。确保你的检查器能够正确处理这些情况。 3. 代码错误:检查你的代码是否存...

403

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Sudoku Solver 数独自动计算工具

Sudoku Solver Sudoku Solver 是由C++编写的数独计算工具,使用了基于MRV策略的Forward Checking算法,是典型的CSP问题的实例。 读者可以复制代码编译使用。 #include<iostream> #include<algorithm> #include<cstring> using namespace std; co...

KarlSzp 949

【软件工程基础】个人项目-数独-代码质量分析及性能测试

一、代码质量分析 由Visual Studio自带的代码分析工具,可以看出代码无错误和警告。 二、性能分析 从调试菜单中选择性能探查器,打开如上图的界面,设置完命令行参数后,点击开始,生成报告如下图。 这是设置命令行参数为-c 1000的情况下,即生成1000个数独终局。 这是CPU使用状况 可以看出执行单个工作最多的函数。 函数调用次数最多的函数,执行的都是输出到文件的操作。这个版本是...

weixin_42544185的博客 328

Python实现9x9方格数独求解小工具

上面这个程序中,我们首先定义了一个9x9的数独棋盘,并定义了一些函数用于打印棋盘、查找空白格子、检查数字是否合法以及递归求解整个棋盘。我们还提供了一个用户界面,在用户按下任意键后开始求解数独,并在求解完成后打印出结果。为了实现9*9方格的数独求解工具,我们需要使用Python编写程序。下面是一个简单的代码示例,可以通过命令行交互式输入和输出来实现数独求解。运行上述代码后,控制台将输出原始数独和已经求解的数独。从结果中可以看出,我们的程序能够准确地求解数独。

Python领域优质萌新学习笔记 1110
上一篇: 随机分组工具(工具)
下一篇: 自动走迷宫(DFS)
ACM_Fish
博客等级 码龄10年 69粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值