
Dancing Links
文章平均质量分 76
Benzema67
北京邮电大学学生
展开
-
POJ 3067 Sudoku DLX
和POJ 3074一样 #include #define inf 1e8 #define M 16*16*16*16*16*4+100 #define N 16*16*16+100 int U[M],D[M],L[M],R[M],C[M],X[M];//x代表M所属的行,c代表M所属的列,U,D,L,R为一个元素的上下左右指针 int H[N],S[N],Q[N];//H是水平循环链表的头指针原创 2012-01-25 17:51:03 · 663 阅读 · 0 评论 -
POJ 3074 Sudoku DLX
建图还是坑了我一下午。。。。终于把数独搞定了(囧) 具体细节我加了注释 #include #define inf 1e8 #define M 9*9*9*9*9*4+100 #define N 9*9*9+100 int U[M],D[M],L[M],R[M],C[M],X[M];//x代表M所属的行,c代表M所属的列,U,D,L,R为一个元素的上下左右指针 int H[N],S[N],Q[原创 2012-01-25 17:27:07 · 1116 阅读 · 0 评论 -
HUST 1017 Dancing Links 模板
#include #define N 2011 #define M 102011 int U[M],D[M],L[M],R[M],C[M],X[M];//x代表M所属的行,c代表M所属的列,U,D,L,R为一个元素的上下左右指针 int H[N],S[N],Q[N];//H是水平循环链表的头指针,S代表每一列的元素个数,Q存储一个可能结果 int size,n,m; void remove(in原创 2012-01-10 15:52:07 · 1032 阅读 · 0 评论 -
ZOJ 3209 Treasure Map DLX入门
关键是建好图 把n*m的矩阵看成n*m个单位元,作为n*m列;每一个矩形一行。 问题即转化为从这些行中选择最少的一部分使每一列被覆盖且仅覆盖一次。 #include #define inf 10000000 #define N 1005 #define M 1024*505 int U[M],D[M],L[M],R[M],C[M];//C代表M所属的列,U,D,L,R为一个元素的上下左右指针原创 2012-02-01 22:55:16 · 1404 阅读 · 0 评论 -
HDU 2295 Radar DLX重复覆盖
DLX重复覆盖对于当前矩阵的处理是,将当前列去掉,并将选作当前列的解的行能够覆盖到的列全部去掉。因为不需要每列仅由一个1去覆盖,因此不必要把能够覆盖某一列的所有行全部去掉。因此remove和resume函数的写法将会有所不同(具体可参考下面我写的代码) 第二个区别是,由于矩阵密度下降会变慢(因为去掉的少了),因此要加上一个强剪枝。这个剪枝利用的思想是A*搜索中的估价函数。即,对于当前的递归深度K原创 2012-02-03 14:46:58 · 1272 阅读 · 0 评论