首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

【数据结构】用Dancing Links解决精确覆盖有关问题

2012-08-01 
【数据结构】用Dancing Links解决精确覆盖问题插入一个节点依赖于表头。H[]记录的是每一行第一个元素的位置。

【数据结构】用Dancing Links解决精确覆盖问题

插入一个节点依赖于表头。H[]记录的是每一行第一个元素的位置。

删除操作删除的是这一列和这一列中有1的行。

恢复操作和删除操作相反。

搜索过程按照上面的思路即可,判断表中是否为空只要看0号表头左右是否有列。

  精确覆盖问题本身比较抽象,一般不会出现裸的情况。但精确覆盖问题有实际的意义,行是提供的选择的所有的可能性,列是限制与约束条件,只要能将其它问题转换为这种形式,就可以套用DLX解决精确覆盖问题的模式了。


例:POJ3740 Easy Finding

裸的精确覆盖

代码:http://blog.csdn.net/cyberzhg/article/details/7750412

  数独可以说是转化为精确覆盖问题的最经典的例子了。行作为选择的可能性,9×9数独一共81个方格,每个方格有9中填法,所以矩阵一共729行。每一行、每一列、每一个3×3方格数字不能重复,每一个方格必须填一个数字,所以矩阵一共(9+9+9)×9+81列。为了构造矩阵,如果当前位置的数字已经给出,则把对应行的相应位置置1即可,如果数字没给出,就把1~9所有数字加入。


例:

9×9的数独:

POJ2676 Sudoku

代码:http://blog.csdn.net/cyberzhg/article/details/7750426

POJ3074 Sudoku

代码:http://blog.csdn.net/cyberzhg/article/details/7750432


16×16的数独:

POJ3076 Sudoku

代码:http://blog.csdn.net/cyberzhg/article/details/7750434


热点排行