
搜索---DLX
forezxl
水君一枚
展开
-
DLX 简介(hihocoder1317)
问题简介精确覆盖问题:给定一个01矩阵,从中选出若干行,使得每一列恰好有一个1。求一个方案。算法实现搜索每次选择一行,然后把这一行有1的列,在同一列中也有1的其它行,以及这一行本身从矩阵中除去。然后又变成了一个小的矩阵,一直递归至只剩一行。如果这一行全是1,则返回有解并输出选择的行编号,否则无解并恢复原来矩阵。如果搜索完毕后仍没有方案则无解。下面给出一张大矩阵变小矩阵的原创 2018-01-23 21:14:14 · 471 阅读 · 0 评论 -
hihocoder1321 搜索五·数独
DLX题目传送门DLX的一个经典应用。首先我们需要把这个数独问题转化为一个精确覆盖问题。根据数独的规则,我们有如下几个限制: 1.每个数字在每一行只能出现一次。限制编号1~81 2.每个数字在每一列只能出现一次。限制编号82~162 3.每个数字在每一个九宫格内只能出现一次。限制编号163~243 4.每一格只能填其中一个数字。限制编号244~原创 2018-01-25 20:33:33 · 666 阅读 · 0 评论 -
洛谷P1074 靶形数独(NOIp2009)
DLX题目传送门常规方法是DFS+一些剪枝。但是因为这是数独,可以用DLX求出数独的所有解,取分数最大的那个即可。不会DLX的小伙伴看这里代码:#include#include#include#define N 81*9#define M 81*4using namespace std;struct node{ node *l,*r,*u,*d;原创 2018-01-27 11:00:20 · 281 阅读 · 0 评论