Dancing Links学习:http://www.cnblogs.com/steady/archive/2011/03/15/1984791.html
以及图文学习:http://www.cnblogs.com/grenet/p/3145800.html
思路:这题是Dancing Links即DLX的最简单题目了吧,看懂了这个知识点之后。也不想自己敲了。然后搜索了好多个代码模板。认为这个我比較好理解也比較好掌握。然后就用这个模板了。
#include#include #include #include #include #include using namespace std;#define MAXN 350*30+30#define INF 0xFFFFFFint head,sz;int U[MAXN],D[MAXN],L[MAXN],R[MAXN];//上下左右链表指针int H[MAXN],ROW[MAXN],C[MAXN],S[MAXN],O[MAXN];void remove(int c){ L[R[c]]=L[c]; R[L[c]]=R[c]; for(int i=D[c]; i!=c; i=D[i]) { for(int j=R[i]; j!=i; j=R[j]) { U[D[j]]=U[j]; D[U[j]]=D[j]; --S[C[j]]; } }}void resume(int c){ for(int i=U[c]; i!=c; i=U[i]) { for(int j=L[i]; j!=i; j=L[j]) { ++S[C[j]]; U[D[j]]=j; D[U[j]]=j; } } L[R[c]]=c; R[L[c]]=c;}bool dfs(int k){ if(R[head]==head) return true; int s=INF,c; for (int t=R[head]; t!=head; t=R[t]) if (S[t]