$DLX$,全称$Dancing\ Links\ X$,即舞蹈链算法。这是一个十分高效且实用的算法,它主要用于求出精确覆盖问题的一组解。
转载
2019-04-18 13:18:00
86阅读
2评论
1. 精确覆盖int U[N],R[N],D[N],L[N],num[N],H[N],col[N],line[N];int head,id,flag;int nn,mm;void prepare(){ id=mm; for(int i=0;i<=mm;i++) { num[i]=0; U[i]=i; D[i]=i; R[i]=i+1; L[i+1]=i; } R[mm]=0; L[0]=mm; memset(H,-1,sizeof(H));}void link(int tn,int...
转载
2013-04-09 07:04:00
67阅读
2评论
[toc]
一下题目可以套白书模板UVA 1309 Sudoku把Sudoku上的
原创
2016-07-12 15:53:46
50阅读
16*16的数独, 跟9*9的类似。。。SudokuTime Limit:10000MSMemory Limit:65536KTotal Submissions:3683Accepted:1799DescriptionA Sudoku grid is a 16x16 grid of cells grouped in sixteen 4x4 squares, where some cells are filled with letters from A to P (the first 16 capital letters of the English alphabet), as shown in
转载
2013-04-05 15:29:00
36阅读
题意:给你一个01矩阵,然后求是否存在选择一些行,使得每一列的1的个数都为1。思路:貌似朴素的DFS也可以,加点剪枝就可以过。这里贴个DLX的模版。推荐博客:http://www.cppblog.com/notonlysuccess/archive/2009/07/10/89701.html这里讲的很详细。#include #include #include #include #include #include #include #include #include #include #include #include #define Max 2505#define FI first#defin
转载
2013-09-16 19:11:00
32阅读
2评论
貌似是一道区域赛的题目。 和数独有着相似之处。。。题目的关键在于建图, 然后要注意的是重边!Power StationsTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1566Accepted Submission(s): 409 Special JudgeProblem DescriptionThere are N towns in our country, and some of them are connected by electri
转载
2013-04-08 21:56:00
27阅读
和之前那道数独一样。。。 搜索很强大。只用了47msSudokuTime Limit:1000MSMemory Limit:65536KTotal Submissions:7108Accepted:2498DescriptionIn the game of Sudoku, you are given a large 9 × 9 grid divided into smaller 3 × 3 subgrids. For example, .2738..1..1...6735.......293.5692.8...........6.1745.364.......9518...
转载
2013-04-05 15:28:00
45阅读
第一次做数独的题目, 最纠结的是建矩阵无疑。。。 想了N久才把这个矩阵给弄好,真的是很麻烦。 但是确实DLX 好快,解数独几乎是秒杀。。。SudokuTime Limit:2000MSMemory Limit:65536KTotal Submissions:11405Accepted:5645Special JudgeDescriptionSudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller squares 3x3 as shown on the Figure
转载
2013-04-05 13:48:00
37阅读
欢迎访问——该文出处-博客园-zhouzhendong 去博客园看该文章--传送门 舞蹈链是一个非常玄学的东西…… 问题模型 精确覆盖问题:在一个01矩阵中,是否可以选出一些行的集合,使得在这些行的集合中,每列有且仅有1个1。 例子 1 1 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1
转载
2017-08-07 21:21:00
198阅读
2评论
重复点覆盖的题, 建好图就可以直接A 了。。。Bomberman - Just Search!Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 497Accepted Submission(s): 276 Problem DescriptionBomberman has been a very popular game ever since it was released. As you can see above, the game is p
转载
2013-04-08 13:45:00
40阅读
其实是一道DLX的简单题, 可是我做了两天,虽然这两天做的很间断,但是我懂的了一些东西。并不是你算法对的,感觉跟别人的代码差不多就可以达到和别人一样的效果, 这题算法大家都一样但是写出的程序速度却相差有10倍。 我就是因为写的烂,然后一直TLE,一开始我以为是哪里死循环了,后面一直TLE,看了别人的代码,然后一点一点的修改,最后才能过。。。一定要注意自己代码的风格, 一些细节,能省就省,尤其是这种复杂度不定的搜索题, 更是要注意能省一点是一点!Treasure MapTime Limit:2 Seconds Memory Limit:32768 KBYour boss once had got
转载
2013-04-04 10:21:00
80阅读
2评论
/* 题意为给定一个n*m的大矩形,再给出p个小矩形,给出左上角和右上角的坐标,问能不能从这些小矩形里面拿出一些完全覆盖掉给定的大矩形,要求小矩形覆盖时不能交叉,如果可以,求出最少需要多少个小矩形,否则输出-1.
本题可以转化为DLX完全覆盖问题,构造01矩阵。怎么构造呢?首先我们把给定的p个小矩形,每个看作一行,那么构造出的矩阵有p行,原来n*m的大矩形,可以分为n*m个小格,每个小格看作是...
原创
2021-07-15 15:09:18
114阅读
大致了解了一番DLX指令的基本架构,如下知识点看起来很少,整理真的不易。继续加油攻克,希望在脑海里有软硬件协同,编译器,操作系统,系统架构的整体思维。下一篇进入到常规的流水线学习阶段, 看书虽然快,但实在理解不了一些细节的东西,慢慢看视频输出吧。 共勉。 ...
转载
2021-09-08 17:21:00
1452阅读
2评论
建图还是坑了我一下午。。。。终于把数独搞定了(囧)具体细节我加了注释#include<cstdio>
#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[N];//H是水平循环链表的头指针,S代表每一列的元素个数,Q存储一个可能结果
char map[100];
bool v[N];
int size;
void remove(int
转载
2012-01-25 17:27:00
65阅读
2评论
建图还是坑了我一下午。。。。终于把数独搞定了(囧)具体细节我加了注释#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[
原创
2023-09-15 10:08:19
53阅读
/* 题意为给定一个n*m的大矩形,再给出p个小矩形,给出左上角和右上角的坐标,问能不能从这些小矩形里面拿出一些完全覆盖掉给定的大矩形,要求小矩形覆盖时不能交叉,如果可以,求出最少需要多少个小矩形,否则输出-1.本题可以转化为DLX完全覆盖问题
原创
2022-03-10 15:21:45
144阅读
16×16的数独。看白书学的DLX,有些细节还有待消化,贴个模板先。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 const int maxn = 16...
转载
2015-09-18 22:27:00
91阅读
2评论
和POJ 3074一样#include<cstdio>
#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是水平循环链表的头指针,S代表每一列的元素个数,Q存储一个可能结果
char map[20][20];
int size;
void remove(int c)
{ R[L[c]]=R[c],L[R[
转载
2012-01-25 17:51:00
25阅读
2评论
转载
2012-10-28 18:00:00
30阅读
2评论
和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是水平循环链表的头指
原创
2023-09-15 10:08:06
51阅读