搜索:DLX算法
精确覆盖问题:在一个0-1矩阵中,选定部分行,使得每一列都有且只有一个1。求解一种选法 舞蹈链(Dance Link),也就是一个循环十字链表,可以快速的删掉和恢复某行某列 结合了舞蹈链的搜索就称作DLX算法 这里贴一个用DLX算法解决16×16数独的代码 9×9的直接暴力会更好 1 // LA2659 Sudoku 2 // Rujia Liu 3 #include<cstdio> 4 #include<cstring> 5 #include<vector> 6 7 using namespace std; 8 9 const int maxr = 5000 ; 10 const int maxn = 2000 ; 11 const int maxnode = 20000 ; 12 13 // 行编号从1开始,列编号为1~n,结点0是表头结点; 结点1~n是各列顶部的虚拟结点 14 struct DLX { 15 int n, sz; // 列数,结点总数 16 int S[maxn]; // 各列结点数 17 18 int row[maxnode], col[maxnode]; // 各结点行列编号 19 int L[maxnode], R[maxnode], U[maxnode], D[maxnode]; // 十字链表 20 21 int ansd, ans[maxr];