我中学时常填数独,好像是来自《课堂内外》杂志,倒数一二页有时候会有个数独。

  而现在,我想做个数独机,预设功能如下:用户选择特征,数独机随机生成符合此特征的一个数独。

  因为选择的特征一般来说是若干个数独共有的特征,只有极特别的特征单属于一两个数独题。

  首先可以计算一下所有的数独题目共有多少个,这个不难,毕竟每个数独只有9*9==81个格子,并且只能填入1—9这9个数字,所有数独的总量是有限的。

(设:崭新数独题已被数字占领的格子为“小黑格”;所有需要玩家来填入的格子为“大白格”;游戏过程中被玩家填入的并且已经确定正确的格子再加上小黑格,称为“大黑格”,在产生大黑格的情况下,剩余的空白格为“小白格”。设:已经被填满的数独为“数独表”。此称谓只在本文有效,便于文章理解。)

  最简单的数独类型无疑就是初始格有80个,只需要玩家填入一个数字即可,然后越难的题目小黑格越少。(当然对于题目的难易,不同的玩家有不同的标准,这里粗略地按照大白格的多少来定义。)最难的数独题,按数独的定义来说,也就是可谓“最简条件”,即这个数独题目,把其上任何一个初始数字拿掉,都将使填数过程中的逻辑推导出现断层,使解题者根本无法完成数独。但如果考虑到数字空间分布,或者是逻辑嵌套深度,最简条件态的数独们又可以被另行评估出不同的难易程度。

  也不能说出题者把几个数字随机摆到格子里就算是数独题,必须要能让玩家根据小黑格,经过正确的逻辑推导,最终能给出一个正确答案才行。因为有的情况下,小黑格的分布是不足以用来推导出大白格的。

  所以根据以上两段,数独题目的总数并非简单的把若干个1—9随便放入9*9方格中算出所有可能的组合情况,这些组合中,有一些是无法用于完成数独的,要排除掉,还有小黑格有81个(即所有格子已被填满)的情况也要排除掉(你至少要留出一个空格来给玩家吧!!“~-~”)。

  关于数独中的几个数值需要先整理一下:

  1,总共81个格

  2,每行9格互斥,每列9格互斥,每方9格互斥

  3,已完成的数独总是包含九个1,九个2,九个3,... ,九个8,九个9。

  4,据Wiki表述,数独表共有6,670,903,752,021,072,936,960个,除去具有对称变换相似性的那些,就少得多了,只剩5,472,730,538个。

  5,而最简条件态的数独题,就多得多了,原因显而易见,一个完成态数独表可以通过删减数字,生成多个最简条件数独题目。Wiki显示,某计算—(翻译版)估计共有3.10 × 1037个最简条件题目,另外加上2.55 × 1025个对称变换相似的最简条件题目。(这些数字具体怎么统计出来的下文再研究。)

  (一个表对应多个题,意味着不同的数独题可能会共有同一个答案。)

  关于数独的几个疑问也需要先整理一下:

  1,一个数度题目是否可能存在多个答案?根据网上的资料来看,出现多个答案的数独是不完善的。即标准的数独题目应该只存在一个答案。这就要求出题者限制更多的条件以防出现冗余态。

  一种方法属于“填进去”,先填一个,再填一个,直到可以用来作为一个数独题,能被完整地推导出来。先为9*9方格定义位置,可以把从左到右从上到下的每个方格依次编号,使每一个格子都有个名字,比如“22”代表第二行第二个格子。如下图:

  此方法第一步在11格(即第一行第一格)尝试填入数字1,此时会导致编号为(行内12,13,14,15,16,17,18,19以及列内21,31,41,51,61,71,81,91以及方内(3*3小方)另外四个22,23,32,33)的格子不能填入1。(需要注意的是,最后方内需要考虑的总是4个,是因为任一参照格在同方内的同行同列格总会占去方内四个格子,加上参照格,共5个,剩余方内的相关格就只剩四个。)它们不能再填1了,即是除去它们,以及已填的11格,数独内剩余60个空格中可以任取一格再次填入1(并不是说可以在60个格中任选几个都能填1,有的会排斥),但这里先不说再填1的事,说说第二步:第一步已占领11格,接下来占领12格,12格不能填1,所以可以填入其它八个,

  另一种方法刚好相反,“拿出来”,比如拿到一个已完成的数独,每个格都已被正确填入,然后逐步挖出一部分数字,最多挖到最简条件态,此过程中的任一状态都可以作为一个数独题。完成态数独表的生成比较简单,假设已列为参照,先算出每一列所有的排列情况,即将9个不同元素排序,共有多少种组合。很简单,P(9,9)=9!=362880。

  两种方法的难点及重点都在于,如何判断此时的数字分布是否已成玩成数独的充分条件。

转载于:https://www.cnblogs.com/oler/p/9644365.html

自动生成指定特征的数独题目(未完待续)相关推荐

  1. 对抗生成网络学习(十六)——stackGAN++利用文字生成鸟类图片(tensorflow实现)(未完待续)

    一.背景 最近工作逐渐步入正轨,自己要做一个文字和图像的交互,所以就考虑先做做类似的工作,恰好之前有看到过stackGAN,因此这次就做做stcakGAN++. stackGAN其实发布的比较早,st ...

  2. Paper之BigGAN:ICLR 2019最新论文《LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS》(未完待续)

    Paper之BigGAN:ICLR 2019最新论文<LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS> ...

  3. javascript有用小功能总结(未完待续)

    1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...

  4. 《图解 HTTP》读书笔记(未完待续)

    ARP 协议(Address Resolution Protocol)一种以解析地址的协议,根据通信双方的 IP 地址就可以查出对应的 MAC 地址. MAC( Media Access Contro ...

  5. pythonb超分辨成像_Papers | 超分辨 + 深度学习(未完待续)

    1. SRCNN 1.1. Contribution end-to-end深度学习应用在超分辨领域的开山之作(非 end-to-end 见 Story.3 ). 指出了超分辨方向上传统方法( spar ...

  6. 学完oracle 再学mysql_一篇文章让Oracle程序猿学会MySql【未完待续】

    一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方 ...

  7. GKCTF(MISCCRYPTO部分)(未完待续。。)

    写在前面: 嘎嘎,又是被比赛虐的一天(连续虐了三天呜呜呜,安恒月赛等等在写嘎嘎) 部分wp,剩下的一题目前还不会,这次可能会标未完待续嘎嘎 crypto 0x01小学生的密码学 嘎,看到题目描述 e( ...

  8. 线下实体店铺会员引流的四种方法-未完待续

    2022年,因为疫情的影响以及电商平台的持续发力,线下门店消费者到店流量明显减少,线下实体门店如何才能通过更低的成本更高的效率进行线下引流呢?这是当下零售企业需要重视的问题. 今天博阳为您介绍4种会员 ...

  9. CTF论剑场(web) write up 未完待续

    CTF论剑场(web) write up web26 直接给你一串代码 <?php $num=$_GET['num']; $str=$_GET['str']; show_source(__FIL ...

最新文章

  1. 智能驾驶计算平台算力技术
  2. 自噬相关数据库Human Autophagy Database使用指南
  3. Boost.Signals2 的初学者你好世界示例
  4. git命令详解( 八)
  5. 虚拟空间独立服务器哪个好,共享虚拟主机和独立哪个好
  6. HDU 6064 RXD and numbers
  7. C++中STL-stack的用法
  8. SharePoint 解决管理员密码修改后的问题
  9. 为什么说 5G 绝对不是伪命题? | 人物志
  10. Crnn中文end-to-end识别
  11. oracle应用技术期末考试,Oracle数据库应用技术
  12. iOS - Analyze 静态分析
  13. 3.在LCD12864上显示属于你的文字
  14. Futura字体和Logo设计实践
  15. 云服务器搭建Hadoop集群
  16. tinymce 上传本地视频
  17. 新一代XSS平台(送邀请码)
  18. 阿里 P7 到底该具备什么样的能力?
  19. 推荐几种可以直接翻译PDF英文文献的方法
  20. 星载SAR的各项指标解读(史上最全)预览

热门文章

  1. 内存泄漏和内存溢出区别与联系
  2. 大数据战略:从数据大国到数据强国
  3. 教你看懂存储卡的速度,U3 U1 ⑩ ④ V30 V60 V90 A1 A2
  4. Unity3D 开发工具系列 UI框架:定义设置Defines
  5. 已知银行整存整取存款不同期限的年息利率分别为
  6. win10系统UEFI+GPT模式下安装Ubuntu双系统方案
  7. git修改默认编辑器
  8. About RSS Reader
  9. 励志改变人生-励志日志
  10. Django - Template标签操作