数独

用Python生成数独 上次做出了怎么算数独,开心坏了,鼻子翘起还没两天,脑瓜里又蹦出了个新想法:创造数独。 于是乎,又捣鼓捣鼓,终于整出来了!(吼吼吼吼吼~~~) 这个算法的基本思路是这样的: 1、定义一个空的数独出来; 2、随机将1~9填入第一行; 3、随机将第一列填满; 4、随机将第九列填满; 5、用添加了随机解法的解数独算法填写出一个随机数独谜底; 6、建立一个集合l=[0~80],随机从谜底抠去... 阅读详情

题目:牛客网

解题思路:

看注释

public class Solution {
  public void solveSudoku(char[][] board) {
        //深度搜索
        dfs(board, 0);
    }
 
    private boolean dfs(char[][] board, int step) {
        // TODO Auto-generated method stub
        int  x, y;
        if (step == 81) {
            return isValidSudoku(board);
        } else {
            // 根据step确定行列x,y
            x = step / 9;
            y = step % 9;
            if (board[x][y] != '.') {
                // 如果x,y处不是'.'那么直接进一步深度搜索
                if (dfs(board, step + 1))
                    // 当第81步,最后一处有数字,说明已经深度搜索完毕,直接return出来
                    return true;
            } else {
                // 需要填写数字,填写1-9判断是不是有效的数独输入
                for (int i = 1; i < 10; i++) {
                    board[x][y] = (char) ('0' + i);
                    if (isValidSudoku(board))
                        if (dfs(board, step + 1))
                            return true;
                    //如果不是有效的数独,那么就回复现场继续尝试,当填了9也不行之后就
                    //return false回上一步
                    board[x][y] = '.';
                }
            }
            return false;
        }
    }
 
    public boolean isValidSudoku(char[][] board) {
        // 行遍历和列遍历
        for (int i = 0; i < 9; i++) {
            int[] nums = new int[9];
            for (int j = 0; j < 9; j++) {
                if (board[i][j] >= '1' && board[i][j] <= '9') {
                    if (nums[(int) (board[i][j] - '1')] == 1) {
                        return false;
                    } else {
                        nums[(int) (board[i][j] - '1')] = 1;
                    }
                }
            }
            int[] nums2 = new int[9];
            for (int j = 0; j < 9; j++) {
                if (board[j][i] >= '1' && board[j][i] <= '9') {
                    if (nums2[(int) (board[j][i] - '1')] != 0) {
                        return false;
                    } else {
                        nums2[(int) (board[j][i] - '1')] = 1;
                    }
                }
            }
        }
        // 遍历小九宮格
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                int[] nums = new int[9];
                // 九宫格遍历
                for (int k = 0; k < 3; k++) {
                    for (int k2 = 0; k2 < 3; k2++) {
                        if (board[i * 3 + k][j * 3 + k2] >= '1'
                                && board[i * 3 + k][j * 3 + k2] <= '9') {
                            if (nums[(int) (board[i * 3 + k][j * 3 + k2] - '1')] != 0) {
                                return false;
                            } else {
                                nums[(int) (board[i * 3 + k][j * 3 + k2] - '1')] = 1;
                            }
                        }
                    }
                }
            }
        }
        return true;
    }
}

 

数独 -- 合法数独与完全数独 数独游戏是一个即有趣又美丽的益智游戏,玩过的人都对它爱不释手,本文讨论的是如何生成全部的合法数独的研究 阅读详情

相关推荐

构造数独和解数独

数独,俗称九宫格,由一个9×9的网格组成,整个网格又分成9个3×3的小正方形网格,每个格子有一个数字(1~9),数独满足如下要求: (1)每个数字在每一行只出现一次 (2)每个数字在每一列只出现一次 (3)每个数字在每个3×3的小区域中也只出现一次 如下图所示,为我们比较常见的数独形式,为一个缺了数字的数独,现在要求我们把其补充为一个完整的数独。 其实,构造数独和解数独的步骤差不

perfectjob的专栏 1320

数独问题

数独问题 数独(shù dú)是源自18世纪瑞士的一种数学游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。 数独盘面是个九宫,每一宫又分为九个小格(cell)。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,...

qq_44146952的博客 493

数独_设计实现过程

数独_设计实现过程 目录 设计实现过程 开发环境 代码组织 代码结构 模块设计 函数流程图 代码说明 生成数独 生成数独题目 求解数独 求解单个数独 开发环境 操作系统 Windows 10 IDE: Visual Studio 2017 Visual Studio code 编程语言:c++ 代码组织 代码结构 ...

lanshi00的博客 1761

(附代码)数独大作业【读取数独,解数独,生成唯一解数独(随机,特定形状,不同难度生成),玩数独】

上学期简单的做了一个数独程序,想简单的为大家提供简单的思路,下面是我的具体报告 一,实验目的 用C语言实现数独 二,实验要求 (1)实验基本要求 编写代码实现数独的部分功能,包括将当前数独状态输出到屏幕上、插入一个数、修改一个数、检查当前数独是否成立。 (2)加分项 1, 能够判断数独是否可解 2, 能够给出当前状态下,数独的下一步的提示 3, 能够进行题目的初始化,即能够让计算机给出一个最终只有唯一解的数独题目 三,实验内容 实现了基本功能,可以通过文件读取数独;把数...

Timeseed的博客 6464

用Python巧解数独

这疫情期间,宅在家里,闲来无事,也不知道哪根筋搭错了,就去玩数独了,(这不是自找麻烦嘛......)。 结果还玩上瘾了(无语),玩出了一点道道,但是每次自己手动解题总要花费半个小时以上(骨灰级难度,嘻嘻嘻),每次推导错误撤回重来就感觉心肌梗塞了一般,动不动就搞得自己抓狂、抓狂、抓狂!(重要的事情说三遍!) 于是,我就想偷个懒,看看用Python解决数独问题,最后花了两天得出以下公式(Python菜...

qq_42584843的博客 2083

Python 练手之数独(一)——生成填充好的数独

很久么有写东西了,最近闲着无聊,想学习Python,光看书和别人的代码挺无聊的,于是想自己找个小项目练练手。九宫格是一个大家都很熟悉也喜欢打发时间的游戏,于是打算用Python来实现一下。 九宫格是什么,相信大家都很清楚: 在 9 X 9 的格子上填写数字1,2,3,4,5,6,7,8,9,要求: 1、每行的数字不能重复 2、每列的数字不能重复 3、一共九个 3 X 3 的小区域中数字不能重复。 目前大多实现方法都是先和拉斯维加斯生成法和深度优解数独。这里也采用这种方法,不过实现细节上有一些区别。 由于涉及

was_a_coder的博客 1997

数独终局游戏(数独终局生成,数独问题求解,数独题目生成)

数独终局游戏(终局生成、题目生成和解题)项目简介1、项目要求2、PSP表格3、解题思路及过程3.1 数独终局生成解决过程 项目简介 Github链接:https://github.com/fagen/sudoku 1、项目要求 能够生成1-1e6个不一样的数独终局并输出到文件 (命令:sudoku.exe -c abc ) 能够从文件里读取数独问题并将求解结果输出到文件 (命令:sudoku.e...

weixin_37861541的博客 3135

用Prolog解决数独

转载自:https://mp.weixin.qq.com/s/NE4j2Jc0vzw9pr2w4BF7hg 我们先了解一下什么是数独 数独(shù dú)是源自18世纪瑞士的一种数学游戏。它是一种运用纸、笔进行演算的逻辑游戏。数独有多种类型,我们仅以其中一种类型作为本文实例。 玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。 方格 水平方向有九横行,垂直方向有九纵列的矩形,画分八十一个小正方形,称为九宫格(.

xilimn的博客 2020

数独 生成及求解

项目地址https://github.com/si1entic/sudoku需求分析 生成终局 格式:sudoku.exe -c n 1)不重复 2)1<=n<=1000000,能处理非法参数 3)左上角数字固定为(4+4)% 9 + 1 = 9 4)n在1000以内时,要求程序在 60 s 内给出结果 5)输出生成的数独终盘至sudoku.txt 求解数独 格式:sudoku.

Silentic 7350

数独器:解决数独游戏的必备工具

自定义数独题目创建是数独爱好者和专业玩家展现创造力与逻辑思维的重要方式。在这一章节中,我们将深入了解自定义数独题目的构造原理,掌握如何手动构造数独题和使用自动生成功能。手动构造数独题目是一个创造性和逻辑性的过程。你可以从一个完全空白的网格开始,先在某个位置填入数字,然后按照数独的规则,逐步填写其他数字,确保每一行、每一列和每一个3x3的子网格中数字1到9不会重复。手动构造数独题目的基本步骤:从一个空白的数独网格开始。

weixin_29301059的博客 1077

【主力资金密码】副图指标升级版使用技术图文案例分解,通达信软件炒股指标公式代码

(1)主力资金线在低位时,对应的副图指标显示柱线是绿色,这个阶段主力资金参与小,行情处于下跌趋势或弱势震荡。当然,如果结合主图指标【翻倍密码系统】操作,主图的两个买卖点以及K线均线变色跟踪功能,更多的技术支撑,多空更加清晰,共振做多或多头更加确定和安全。如上图标记,中档虚线是参考安全操作的一个区间划分,粉色阶段做多或持股为主,为操作增加一道安全保护。如上图,副图指标【主力资金密码】更新叠加操作区间背景,绿色阶段持币或做空,粉色阶段做多或持股。如上图,副图指标,标记的两个区间,绿色区间时做空或持币。

weixin_69760830的博客 2550

MATLAB GUI游戏设计——数独

总的来说,这个项目在数独游戏设计和求解算法的有一定创新,但是数独生成时间长的问题仍然存在。最后附上源代码endButtonS % 按钮chosenDifficulty % 难度puzzleSudoku % 数独题目solvedSudoku % 数独答案flg % 游戏开始的标志end% 输入参数:% difficulty - 字符串,表示难度级别 ('简单', '中等', '困难')% 首先生成一个解决的数独和最初的数独谜题% 根据难度设置总提示数字的数量case '简单'

m0_51262514的博客 3265

华为OD机试 - 商品推荐多属性排序 - 数组(Python/JS/C/C++ 双机位A卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。双十一来临,小王准备买某个购物平台买坚果。在输入坚果时,页面默认按照综合推荐列表。小王想知道这个综合排序时如何完成的,于是便开始思考算法题。经过一番操作后,完成它的多个关键词排序算法。希望你给小王提供一份正确的排序结果,验证其实现算法结果的准确性

学Java,找哪吒 622

毕马威图形数独

用编程的方式解决毕马威图形数独我为什么要写这篇博客什么是图形数独,请看图形分解分析数独怎么解界面包装最终附上所有的完整的代码 我为什么要写这篇博客 博主的女朋友(你们别问我为什么会有女朋友)之前去一家公司面试,做到了这个题目。很多公司就把这个逻辑作为一个面试的门槛,这个图形数独做不出来连面试的机会都没有。悄悄的说一下,我女朋友是搞财务的(这TM跟逻辑有啥关系啊,顶多就是搞搞加减乘除)。不扯那么多,...

苏州周某人 8630

微信小程序 - 强力解决播放视频卡顿问题,小程序使用video组件播放视频或第三方视频插件,会出现卡顿或者无法播放的各种奇怪问题(微信小程序苹果ios/安卓播放视频很卡不流畅、视频太长或文件大等情况)

微信小程序视频组件播放卡顿,微信小程序video组件出现无法播放或卡顿,微信小程序video组件播放时会出现卡顿,微信小程序使用video组件播放视频的时候,会出现卡顿或者无法播放的问题,微信小程序安卓视频播放卡顿问题,微信小程序苹果ios手机播放视频不流畅很卡,加cdn还是卡,uniapp播放视频会有明显的卡顿问题,video视频时卡顿不流畅问题,为什么video组件播放视频卡顿?苹果微信小程序通过video组件播放视频时卡顿,怎么解决?微信小程序video组件出现无法播放或卡顿,设置custom-cac

🏆 前端领域优质创作者 1万+

Dify 本地部署教程

到这里,Dify 就安装完成了,更多操作设置可以参考官方文档,Dify 和 FastGPT 基本上差不多,也可以同时安装一下 FastGPT 进行体验~Docker Compose 部署 | Dify。

Muti-Agent 6644

【C语言】求解数独 求数独的解的个数 多解数独算法

解决多解数独,搜索问题。

GMfengyi的博客 2121

ArcGIS实验教程——实验二:ArcGIS地理配准完整操作步骤

本文介绍ArcGIS 10.2中地理配准的完整操作流程,涵盖加载扫描地图、启用地理配准工具条、添加控制点(含经纬度输入与坐标系统选择)、均匀分布控制点以提升精度,并最终通过“更新地理配准”完成栅格数据的空间定位。强调控制点数量、分布及坐标系匹配的重要性,附带实验数据下载链接与获取方式,适用于初学者掌握扫描矢量化前的关键几何校正技能。

智慧空间实验室 9万+

java 数独算法_[Java] 数独生成和求解

思路1.生成数独数独的生成总体思路是挖洞法。首先在二维数组第一行随机填充1-9 9个数字,然后将这9个数字随机分布到整个二维数组中,然后使用求解数独的算法对此时的数组进行求解,得到一个完整的数独,然后按照用户输入的提示数量进行随机挖洞,得到最终的数独题目。这种方法理论上可以随机生成(81!/72! = 9.5e+16)种不同的数独题目,足够人类玩上几百年了。2.求解数独求解数独使用的是计算机最擅长...

weixin_35182280的博客 2515

CKS-CN考试之路----11

显然是alpine-b的镜像有libcrypto3-3.1.4-r5。新版本发布老版本会被回收,此时pod只剩下2个container。我们依次测试是哪个镜像里包含libcrypto3。可以看到alpine的pod有3个副本.

Q先生 651

Microsoft AI SDK 与 SAP ABAP:让企业级 AI 能力触手可及的深度整合指南

借助 Microsoft AI SDK,ABAP 开发者无需跳出熟悉的事务码与数据字典,就能把 GPT‑4 的强大语言理解与生成能力深度植入采购、销售、财务等核心业务流程。只要掌握“初始化 SDK → 构造 Prompt → 解析输出”这一范式,未来无论 Azure OpenAI、OpenAI 还是本地化 LLM,都能在同一套代码骨架内快速切换,实现真正的“AI 即服务”。现在,就让我们在下一行 ABAP 里拥抱智能未来。参考链接均于 2025‑07‑22 提取,推荐读者结合实际版本进一步验证。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 431

数独 ( 二 ) ——生成数独终局

解题思路:生成数独终局 我项目的github链接 :https://github.com/gmj0301/gmj 要求 在命令行中使用 -c 参数加数字 N (1<=N<=1000000) 控制生成数独终局的数量 将生成的数独终局用一个文本文件 (假设名字叫 sudoku.txt) 的形式保存起来,每次生成的 txt 文件需要覆盖上次生成的 txt 文件,文件内的格式如下,数与数之间...

weixin_43153229的博客 958

【从零开始学习 UVM】1.2、UVM 概述 —— UVM Installation(UVM 安装)

【从零开始学习 UVM】1.2、UVM 概述 —— UVM Installation(UVM 安装)

努力,加油每一天鸭~ 1944

数独基本规则_10 分钟学会数独

不了解数独的人,请先看我第一篇文章数独的规则以及元素现在你应该知道数独的基本规则,以及行、列和宫避免你没看前面那篇文章,我解释一下我用到的坐标体系R 代表行,C 代表列,B 代表宫R1C1 指第一行第一列那个格子R23C1 指第一列的第二行和第三行 2 个格子R1C23 指第一行的第二列和第三列 2 个格子B1 代表第一宫本文只是数独的基础技巧和快速入门,如果都学会还想继续深入,请等待我的后续文章...

weixin_34593388的博客 8304

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

变形数独简介和目录

变型数独(Variant Sudoku)是标准数独的多种变体,它们在保留基本规则的同时,引入了新的特性。例如,锯齿数独通过改变宫的形状来增加难度。变型数独的规则可以自由定义,甚至可以根据特定需求进行创新。在解题过程中,使用坐标系统(如r2c3表示第2行第3列)和符号(如“=”表示填入数字,“!=”表示排除数字)来描述单元格的状态。此外,变型数独包含多种解题技巧,如排除法、唯一余数法、区块法等,适用于不同类型的变型数独,如对角线数独、杀手数独、无马数独等。

darkhorsefly的专栏 1376

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

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

数独大师级技巧_数独高级解法技巧,数独高手教你如何玩转数独

上次我们讲了九宫数独初级技巧,并留下了一道题,今天我们来将这道题完整的解出来。请完整的解出这道九宫数独首先仔细观察,先看有没有哪一行哪一列或者哪一宫只有一个空格,那么这一行这一列或者这一宫就可以使用唯一数法。通过观察发现,第二列只有一个空格,出现了2、1、4、3、5、9、7、8,只有6没有出现,因此剩下的空格就是6;第三列只有一个空格,出现了6、9、4、8、7、2、1、5,只有3没有出现,因此剩下...

weixin_42184924的博客 1万+

pscad IEEE标准系统搭建说明

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

上一篇: set-matrix-zeroes
下一篇: 合并排序的数组
PMPWDF
博客等级 码龄10年 44粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值