精确覆盖DLX算法模板

代码

struct DLX
{int n,id;int L[maxn],R[maxn],U[maxn],D[maxn];int C[maxn],S[maxn],loc[maxn][2];void init(int nn=0) //传列长
    {n=nn;for(int i=0;i<=n;i++) U[i]=D[i]=i,L[i]=i-1,R[i]=i+1;L[0]=n; R[n]=0;id=n;memset(S,0,sizeof(S));}void AddRow(int x,int col,int A[]) //传入参数是行标号,列长,列数组
    {bool has=false;int first=id+1;for(int y=1;y<=col;y++){if(A[y]==0) continue;has=true;++id;L[id]=id-1; R[id]=id+1;D[id]=y; U[id]=U[y];D[U[y]]=id; U[y]=id;loc[id][0]=x,loc[id][1]=y;C[id]=y; S[y]++;}if(!has) return;R[id]=first; L[first]=id;}void Remove(int Size){for(int j=D[Size];j!=Size;j=D[j])//将左右两边连接L[R[j]]=L[j],R[L[j]]=R[j];}void Resume(int Size){for(int j=U[Size];j!=Size;j=U[j])//恢复L[R[j]]=R[L[j]]=j;}bool vis[ms];//标记行是否访问过int h() //启发式函数
    {int ret=0;int i,j,k;memset(vis,0,sizeof(vis));for(i=R[0];i;i=R[i]){if(vis[i]) continue;ret++;for(j=D[i];j!=i;j=D[j]) //所有关联的标记了for(k=R[j];k!=j;k=R[k]) vis[C[k]]=1;}return ret;}void dfs(int step){if(step+h()>=ans) return;if(R[0]==0){ ans=min(ans,step); return; }int Min=INF,c=-1;for(int i=R[0];i;i=R[i]) if(Min>S[i]){ Min=S[i]; c=i; }for(int i=D[c];i!=c;i=D[i]){Remove(i);for(int j=R[i];j!=i;j=R[j]) Remove(j);dfs(step+1);for(int j=L[i];j!=i;j=L[j]) Resume(j);Resume(i);}return;}
}dlx;
View Code

 

转载于:https://www.cnblogs.com/wust-ouyangli/p/5747086.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 代码布局设置wrap_content,android ScrollView布局(wrap_content,最大大小)

我最后编写了自己的类,扩展了ScrollView既然你问……这是代码.可能不是最干净但它做我想要的.请注意,它期望在创建视图时设置layout_weight,并且不应在父LinearLayout中设置weigthSum,否则你会得到有趣的东西(因为这个的权重从原始值变为0,具体取决于大小ScrollView的内容)首先…

ABAP数据类型

数据类型表&#xff1a; 类型缩写 类型 默认长度 允许长度 初始值 描述 C 文本型 1 Space 字符串数据,如Program D 日期型 8 8 00000000 日期数据,格式为YYYYMMDD F 浮点型 8 8 0 浮点数 I 整型 4 10 0 带正负符号的整数 N 数值型 1 31 00……

cocos2d-x C++ 原始工程引擎运行机制解析

新建一个工程&#xff0c;相信感兴趣的同学都想知道cocos引擎都是如何运行的 想知道是如何运行的&#xff0c;看懂四个文件即可 话不多说&#xff0c;上代码&#xff1a; 1、首先解释 AppDelegate.h 1 #ifndef _APP_DELEGATE_H_2 #define _APP_DELEGATE_H_3 4 #include "…

web高德maker动画_Web Maker —我如何构建一个快速的离线前端游乐场

web高德maker动画by kushagra gour由kushagra gour Web Maker —我如何构建一个快速的离线前端游乐场 (Web Maker — How I built a fast, offline front-end playground) Web Maker is a Chrome extension that gives you a blazing fast and offline front-end playground —…

时间小知识对于时间转换可能有帮助

那么UTC与世界各地的时间应如何换算呢?它是将全世界分为24个时区&#xff0c;地球的东、西经各180(共360)被24个时区平分&#xff0c;每个时区各占15。以经度0(即本初子午线)为基准&#xff0c;东经730′与西经730′之间的区域为零时区&#xff1b;东经和西经的730′与2230′之…

JS——实现短信验证码的倒计时功能(没有验证码,只有倒计时)

1、功能描述 当用户想要获取验证码时&#xff0c;就点击 免费获取验证码 &#xff0c;然后开始倒计时&#xff0c;倒计时期间按钮文字为剩余时间x秒&#xff0c;且不可按状态&#xff0c;倒计时结束后&#xff0c;按钮更改为点击重新发送。 2、分析 必须用到定时器。按钮点击后…

华为OV小米鸿蒙,华为鸿蒙开源,小米OV们会采用吗?

华为曾一直声言不会进入电视市场,由此其他国产电视企业才会采用华为的可见企业是非常担忧同业竞争关系的,而在智能手机市场,华为毫无疑问与其他国产手机企业都是竞争对手,更何况就在2019年下半年和2020年上半年华为在国内手机市场的份额超过四成直逼五成,其他国产手机企业被压得…

第22天:如何使用OpenAI Gym和Universe构建AI游戏机器人

by Harini Janakiraman通过哈里尼贾纳基拉曼 第22天&#xff1a;如何使用OpenAI Gym和Universe构建AI游戏机器人 (Day 22: How to build an AI Game Bot using OpenAI Gym and Universe) Let’s face it, AI is everywhere. A face-off battle is unfolding between Elon Musk…

软件测试基础理论(总结)

1&#xff0e; 软件的三个要素&#xff1a;程序&#xff08;实行特定功能的代码&#xff09; 文档&#xff08;支持代码运行&#xff09; 数据&#xff08;支持程序运行一切有关&#xff09; 2&#xff0e; 软件的产品质量 指的是&#xff1f; 1&#xff09;质量是指实体特性…

android studio 7200u,#本站首晒# 多图杀猫 华为MateBook X上手体验

#本站首晒# 多图杀猫 华为MateBook X上手体验2017-06-09 18:45:4437点赞33收藏78评论前几天华为开了个发布会&#xff0c;带来了三款笔记本电脑&#xff0c;有幸在第一时间借到了MateBook X&#xff0c;现在就来来做一个简单的上手&#xff0c;稍晚一些再跟大家详细聊聊使用起来…

svn强制解锁的几种做法

标签&#xff1a; svn强制解锁2013-12-16 17:40 12953人阅读 评论(0) 收藏 举报分类&#xff1a;SoftwareProject&#xff08;23&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 作者&#xff1a;朱金灿 来源&#xff1a;http://blog.…

数据结构和算法练习网站_视频和练习介绍了10种常见数据结构

数据结构和算法练习网站“Bad programmers worry about the code. Good programmers worry about data structures and their relationships.” — Linus Torvalds, creator of Linux“糟糕的程序员担心代码。 好的程序员担心数据结构及其关系。” — Linux的创建者Linus Torva…

突然讨厌做前端,讨厌代码_有关互联网用户最讨厌的广告类型的新数据

突然讨厌做前端,讨厌代码You know that feeling when you’re scrolling through a blog post and then — BAM! — one of those “Sign up for our newsletter” modals pops up?当您滚动浏览博客文章&#xff0c;然后-BAM时&#xff0c;您就会知道这种感觉。 -弹出“注册我…

iOS设计模式-生成器

定义&#xff1a;将一个产品的内部表象与产品的生成过程分割开来&#xff0c;从而可以使一个建造过程生成具有不同的内部表象的产品对象。 类型&#xff1a;对象创建 类图&#xff1a; #import <Foundation/Foundation.h> interface Character : NSObject property(nonat…

《Android 应用案例开发大全(第二版)》——导读

本节书摘来自异步社区《Android 应用案例开发大全&#xff08;第二版&#xff09;》一书中的目录 &#xff0c;作者 吴亚峰 , 于复兴 , 杜化美&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 目 录 第1章 初识庐山真面目——Android简介 1.1 Android的诞生 1…

模块--sys模块

sys模块是与python解释器交互的一个接口 import sys sys.path #python解释器找模块的环境变量import sys print(sys.path)结果:[H:\\王文静\\python\\4练习\\课堂练习, H:\\王文静\\python, C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\pyth…

匿名方法

与前面的可空类型是一样的&#xff0c;匿名方法也是C# 2.0里面提出来的。 1 匿名方法 1.1 什么是匿名方法&#xff1f; 顾名思义&#xff0c;就是没有名称的方法&#xff0c;因为没有名称&#xff0c;匿名方法只能在函数定义&#xff08;匿名方法是把方法的实现和定义嵌套在了一…

使用React,Redux和Router进行真正的集成测试

by Marcelo Lotif通过马塞洛洛蒂夫(Marcelo Lotif) 使用React&#xff0c;Redux和Router进行真正的集成测试 (Real integration tests with React, Redux and Router) After being bitten a couple of times by bad refactoring and a broken app — even with all my tests…

Go语言从入门到精通 - 数据类型转换

本节核心内容 介绍 Go语言数据类型转换的格式介绍 数据转换代码示例介绍 数据转换过程中的注意事项 本小节视频教程和代码&#xff1a;百度网盘 可先下载视频和源码到本地&#xff0c;边看视频边结合源码理解后续内容&#xff0c;边学边练。 Go语言数据类型转换 Go 语言使用类型…

JNI通过线程c回调java层的函数

1、参看博客&#xff1a;http://www.jianshu.com/p/e576c7e1c403 Android JNI 篇 - JNI回调的三种方法&#xff08;精华篇&#xff09; 2、参看博客&#xff1a; JNI层线程回调Java函数关键点及示例 http://blog.csdn.net/fu_shuwu/article/details/41121741 3 http://blog.cs…