欢迎访问——该文出处-博客园-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. ubuntu中文版man

    man默认是英文的,但ubuntu的源里也有中文版的.以下是配置方法: 1)  终端输入sudo apt-get install manpages-zh 2)  安装后修改配置文件sudo gedit ...

  2. hdu2602 Bone Collector 01背包

    Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like ...

  3. 基础常用的数据结构 Collection Map

    map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等.其中这四者的区别如下(简单介绍): HashMap:我们最常用的Map ...

  4. Confluence 6 设置 Oracle 数据库准备

    请查看 Supported Platforms 页面来获得 Confluence 系统支持的 Oracle 数据库版本.你需要在安装 Confluence 之前升级你的 Oracle 数据库. 如果你 ...

  5. SWift中 '?' must be followed by a call, member lookup, or subscript 错误解决方案

    那是因为你在使用自己写的分类时没有指定返回的数据类型  指定下返回数据类型就好了 我是用的oc写的分类在Swift中使用的 错误代码 private lazy var btn = UIButton.C ...

  6. 第十八单元 nginx服务

    安装python 源 wget   网上下载 原码 编译    安装的流程 (gcc glic) 版本更新时起冲突,删除原版本(或者reinstall重新安装) 可执行文件运行   ./ 软连接 查看 ...

  7. BeatifulSoup模块

    一.介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你 ...

  8. 最长上升子序列(dp)

    链接:https://www.nowcoder.com/questionTerminal/d83721575bd4418eae76c916483493de来源:牛客网 广场上站着一支队伍,她们是来自全 ...

  9. vue中 裁剪,预览,上传图片 的插件

    参考地址: https://github.com/dai-siki/vue-image-crop-upload

  10. Sequence Number

    1570: Sequence Number 时间限制: 1 Sec  内存限制: 1280 MB 题目描述 In Linear algebra, we have learned the definit ...