const int N=1e3+100;//行数const int M=1e3+100;//列数const int NODE=5e5+100;//节点数struct DancingLink{int n,s,ansd;//列数 节点总数 int S[M],A[N],H[N];//S[]该列节点总数  A[]答案  H[]行首指针 int L[NODE],R[NODE],U[NODE],D[NODE]; //L[],R[],U[],D[] 上下左右 int X[NODE],C[NODE];//X[] C[] 行列编号 void init(int n){//初始化 this->n=n;for(int i=0;i<=n;i++)U[i]=i,D[i]=i,L[i]=i-1,R[i]=i+1;R[n]=0,L[0]=n;s=n+1;memset(S,0,sizeof(S));memset(H,-1,sizeof(H));}void DelCol(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 ResCol(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;}void AddNode(int r,int c){//添加节点 ++S[c],C[++s]=c,X[s]=r;D[s]=D[c],U[D[c]]=s,U[s]=c,D[c]=s;if(H[r]<0) H[r]=L[s]=R[s]=s;//行首节点else  R[s]=R[H[r]],L[R[H[r]]]=s,L[s]=H[r],R[H[r]]=s;}bool dfs(int d){//深度,深搜遍历 if(!R[0]){ansd=d;return true;}int c=R[0];for(int i=R[0];i;i=R[i]) if(S[i]<S[c]) c=i;DelCol(c);for(int i=D[c];i!=c;i=D[i]){A[d]=X[i];for(int j=R[i];j!=i;j=R[j]) DelCol(C[j]);if(dfs(d+1)) return true;for(int j=L[i];j!=i;j=L[j]) ResCol(C[j]);}ResCol(c);return false;}}dlx; 

舞蹈链(DLX)模板相关推荐

  1. 浅谈舞蹈链(DLX)

    前言 舞蹈链的名字真好玩- 文章目录 前言 一.舞蹈链概述 二.舞蹈链例题 总结 一.舞蹈链概述 舞蹈链 (Dancing links),也叫 DLX ,是由 Donald Knuth 提出的数据结构 ...

  2. P4929-[模板]舞蹈链(DLX)

    正题 题目链接:https://www.luogu.com.cn/problem/P4929 题目大意 n∗mn*mn∗m的矩形有0/10/10/1,要求选出若干行使得每一列有且仅有一个111. 解题 ...

  3. 舞蹈链java实现_舞蹈链(DLX) - osc_kpp7htz3的个人空间 - OSCHINA - 中文开源技术交流社区...

    #舞蹈链(DLX) Tags:搜索 ##作业部落 ##评论地址 ##一.概述 特别特别感谢这位童鞋His blog 舞蹈链是一种优美的搜索,就像下面这样跳舞- 舞蹈链用于解决精确覆盖或者重复覆盖的问题 ...

  4. DLX (Dancing Links/舞蹈链)算法——求解精确覆盖问题

    精确覆盖问题的定义:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1 例如:如下的矩阵 就包含了这样一个集合(第1.4.5行) 如何利用给定的矩阵求出相应的行的集合 ...

  5. 链表上的舞者——舞蹈链(DLX算法)

    在整个求解过程中,指针在数据间跳跃着,就像精巧设计的舞蹈一样,故Donald E.Knuth把它称为Dancing Links(中文译名舞蹈链). 目录 第一部分:DLX算法的提出 1.1一类被称为精 ...

  6. 【转载】浅入 dancing links x(舞蹈链算法)

    转载自原文出处 浅入 dancing links x(舞蹈链算法) abastract:利用dancing links 解决精确覆盖问题,例如数独,n皇后问题:以及重复覆盖问题. 要学习dacning ...

  7. dancing links(舞蹈链)——求解精准覆盖及重复覆盖问题

    以下转自:https://blog.csdn.net/the_star_is_at/article/details/53425736 问题描述: 给定一个n*m的矩阵,有些位置为1,有些位置为0.如果 ...

  8. [学习笔记]舞蹈链(Dancing Links)C++实现(指针版)

    ·精确覆盖问题 精确覆盖问题的定义:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1. 例如:如下的矩阵 就包含了这样一个集合(第1.4.5行). ·常规的解法 采 ...

  9. HDU 3498 whosyourdaddy (可重复覆盖舞蹈链)

    题意: 给出N个点,M个边构成图.每选取一个点都可以覆盖其相邻点,问要覆盖所有点最少选几个点 思路: 每个点都作为一个点集,进行爆搜覆盖,舞蹈链模板题. 代码: #include <bits/s ...

最新文章

  1. resin安装与配置
  2. react不同环境不同配置angular_DevOps 前端项目(angular、vue、react)打包静态资源生成一份Docker镜像支持部署不同环境...
  3. 可视化mysql怎么导入sql文件_使用navicat导入sql文件的方法步骤
  4. OpenGL clipdistance剪辑距离实例
  5. 高德深度信息接入的平台化演进
  6. oracle语句求保有率,Oracle之保有量计算(当前记录等于前几条记录之和)
  7. 2021农村电商发展趋势报告
  8. 英伟达RTX 3080值不值得抢?在TensorFlow上训练了卷积网络
  9. cef如何隐藏html,CefSharp访问加密的HTML/JS/CSS文件
  10. mysql 计划任务消耗_浅谈MySQL event 计划任务
  11. Leetcode每日一题:142.linked-list-cycle-ii(环形链表Ⅱ)
  12. scala案例_Scala案例类和案例对象深入(第1部分)
  13. idhttp返回乱码_node.js http.get请求返回的中文乱码, iconv zlib模块都不好使,求解决!!!...
  14. 网络安全联盟推进威胁情报共享的扩张
  15. USB 大容量存储设备的开发
  16. 微信双开方法windows Mac iOS
  17. burp小技巧之抓单个网站包
  18. 计算机自检后反复重启 主引导,电脑重装系统时,按错了意外重启然后就一直这样怎么办啊!...
  19. 高效的敏捷测试第八课 静态测试工具和生成测试报告
  20. html 图片鼠标移上去点亮,CSS3 实现鼠标移到图片上时一片亮光一闪而过的效果...

热门文章

  1. NonfairSync.tryAcquire
  2. 运行效果演示-修改applcation-db.xml 文件
  3. Spring 的前世今生
  4. 客户端支持的cookie
  5. 任务调度之Elastic-Job1
  6. DiskFileItemFactory API详解
  7. 设计模式之_Strategy_06
  8. SocketIO-nio
  9. Maven 配置文件 POM 的常用依赖配置代码
  10. 201029阶段二Linux动态库、makefile