欢迎访问——该文出处-博客园-zhouzhendong

去博客园看该文章--传送门

描述

在做DLX算法题中,经常会做到数独类型的题目,那么,如何求解数独类型的题目?其实,学了数独的构建方法,那么DLX算法的精髓——构建矩阵也就慢慢的浮现了。

问题

假设有一个9*9的数独,我们限制每行每列以及每个3*3的小区域有且仅有1~9这些数各一个,现在我们要把1~9共9个数字各9个填入这个数独里面,当然,有些数字已经被添入了,求解数独。

给张图:

建立模型

首先,数独共81个格子,每个格子都得填一个数,那么,我们要精确覆盖每一个格子,所以我们首先建立1~81列。

然后还有9行,每行1~9,每行都得精确覆盖,9行,又得建立9*9=81列;

然后还有9列,每列1~9,同理。

然后还有9个3*3的小格子,每个里面1~9,也同理。

那么总共要建立4*81=324列。

那么要建多少行呢?对于某一个位置的数字,对于已知的,只需要建立一行,表示当前行的信息;如果未知,那么我们要建立9行,第i行表示当前位置填i的情况,这个时候不怕一个位置取多个值,因为前81列的构造限制了这个。

对于在[i,j]i=行号-1,j=列号-1,位置取值k这一行的构造,要构造什么呢?

对于第一个限制,构建第i*9+j+1列

对于第二个限制,构建第81+i*9+k列

对于第三个限制,构建第162+j*9+k列

对于第四个限制,构建第273+((i div 3)*3+j)*9+k列

然后DLX跑一跑就可以了

思考题

16*16的数独怎么做?同理。

关于用舞蹈链DLX算法求解数独的解析的更多相关文章

  1. [探究] 用舞蹈链(DLX)解决一类数独问题

    考虑精准覆盖问题的本质--我们把行看做决策,把列看做任务,那么其实质就是通过决策来完成任务. 那么我们来考虑数独问题的本质,对于一个\(n^2\cdot n^2\)的数独而言,他的目标函数有四个: 1 ...

  2. 舞蹈链 DLX

    欢迎访问——该文出处-博客园-zhouzhendong 去博客园看该文章--传送门 舞蹈链是一个非常玄学的东西…… 问题模型 精确覆盖问题:在一个01矩阵中,是否可以选出一些行的集合,使得在这些行的集 ...

  3. 算法实践——舞蹈链(Dancing Links)算法求解数独

    在“跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题”一文中介绍了舞蹈链(Dancing Links)算法求解精确覆盖问题. 本文介绍该算法的实际运用,利用舞蹈链(Dancin ...

  4. 转载 - 算法实践——舞蹈链(Dancing Links)算法求解数独

    出处:http://www.cnblogs.com/grenet/p/3163550.html 在“跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题”一文中介绍了舞蹈链(Dan ...

  5. [学习笔记] 舞蹈链(DLX)入门

    "在一个全集\(X\)中若干子集的集合为\(S\),精确覆盖(\(\boldsymbol{Exact~Cover}\))是指,\(S\)的子集\(S*\),满足\(X\)中的每一个元素在\( ...

  6. POJ3740 Easy Finding 舞蹈链 DLX

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目 精确覆盖问题模板题 算法 DLX算法 学习DLX算法--传送门 代码 #include <cstring> ...

  7. luogu P4929 【模板】舞蹈链 DLX

    LINK:舞蹈链 具体复杂度我也不知道 但是 搜索速度极快. 原因大概是因为 每次检索的时间少 有一定的剪枝. 花了2h大概了解了这个东西 吐槽一下题解根本看不懂 只能理解大概的想法 核心的链表不太懂 ...

  8. Vijos1755 靶形数独 Sudoku NOIP2009 提高组 T4 舞蹈链 DLX

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目(传送门) 题意概括 给出一个残缺的数独,求这个数独中所有的解法中的最大价值. 一个数独解法的价值之和为每个位置所填的数值 ...

  9. POJ3076 Sudoku 舞蹈链 DLX

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目(传送门) 题意概括 给出一个残缺的16*16数独,求解. 题解 DLX + 矩阵构建  (两个传送门) 学完这个之后,再 ...

随机推荐

  1. 前端 ----jQuery的介绍

    01-jQuery的介绍   1.为什么要使用jQuery 在用js写代码时,会遇到一些问题: window.onload 事件有事件覆盖的问题,因此只能写一个事件. 代码容错性差. 浏览器兼容性问题 ...

  2. destoon使用

    使用小计 1.判断是否是手机端 {$DT_TOUCH}模板中使用 2.判断句 {if}  {/if} 3.表单管理 扩展功能-----表单管理:添加表单---->管理表单选项------> ...

  3. 【Java】「深入理解Java虚拟机」学习笔记(4)- 类文件结构

    我为什么喜欢Java,另一个重要原因就是跨平台,WORA. 程序员是爽了,但肯定有人要为你遮风挡雨,解决WORA的基石就是字节码+虚拟机. ♣Tip 其实这里存在两种无关性,一是平台无关性.另一个是语 ...

  4. python之内置模块random(转载)

    转载自http://www.cnblogs.com/wcwnina/p/9281334.html random.seed(a=None, version=2) # 初始化伪随机数生成器,若种子a相同, ...

  5. 新建maven项目错误处理

    1.如果新建maven 项目确省maven dependencies,则在存在问题工程的.classpath末尾 加上 <classpathentry kind="con"  ...

  6. python的IDE工具-- Pycharm

    我们可以在python的交互环境下编写执行代码,但这只是适合短的代码,当有长的代码时在这里编写就不方便, Python有自带的IDE,根据自己使用的情况来看,感觉Pycharm这款IDE比自带的IDE ...

  7. Django框架第一篇基础

    一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model(模型):和数据库相关的,负 ...

  8. Python基础知识之大杂烩

    一.range 和 xrange 的区别 xrange 与 range 基本上都是在循环的时候用,两者的用法完全相同.所不同的是xrange生成的是一个生成器,而range生成的是一个list对象. ...

  9. unity 3D 学习笔记

    1.父对象的初始位置设,即刚开始的空对象的根节点位置应当设置成(0,0,0) 这样设置可以避免以后出现奇怪的坐标. GameObject实际上就是一些组件的容器. unity 使用公用变量原因是,在U ...

  10. Wireless Penetration Testing(7-11 chapter)

    1.AP-less WPA-Personal cracking 创建一个honeypoint  等待链接,特点在于不需要攻击致使链接的客户端掉线,直接获取了流量的握手包. 2.Man-in-the-M ...