资料:https://ozanerdem.github.io/jekyll/update/2019/11/17/representation-in-sat.html

https://modref.github.io/papers/ModRef2019_In%20Pursuit%20of%20an%20Efficient%20SAT%20Encoding%20for%20the%20Hamiltonian%20Cycle%20Problem.pdf

https://pysathq.github.io/

from pysat.solvers import Glucose3vertices_number=4   #顶点的数量
edges_number=3      #边的数量
str=input()
vertices_number,edges_number=str.split()
vertices_number=eval(vertices_number)
edges_number=eval(edges_number)check_edges=[0]*(vertices_number*vertices_number+1)#读入数据
for i in range(edges_number):num=input()num1,num2=num.split(' ')num1=eval(num1)num2=eval(num2)check_edges[(num1-1)*vertices_number+num2]=1check_edges[(num2-1)*vertices_number+num1]=1g=Glucose3()    #求解器的创建#解决重复出现的问题
for i in range(0,vertices_number):    g.add_clause([-(i*vertices_number+i+1)])for i in range(vertices_number):for j in range(vertices_number):for k in range(vertices_number):if(j!=k):g.add_clause([-(i*vertices_number+j+1),-(i*vertices_number+k+1)])for i in range(0,vertices_number):for j in range(0,vertices_number):g.add_clause([-(i*vertices_number+1+j),-(j*vertices_number+1+i)])#为每一步强制选择至少一个边缘
for i in range(vertices_number):ls=list()for j in range(vertices_number):ls.append(i*vertices_number+1+j)g.add_clause(ls)#强制访问每个顶点
for i in range(vertices_number):ls=list()for j in range(vertices_number):ls+=[j*vertices_number+1+i]g.add_clause(ls)#强制路径由真实边缘组成
for i in range(1,vertices_number*vertices_number+1):if check_edges[i]!=1:g.add_clause([-i])g.solve()
if g.solve==False:print('NO')flag=0while g.solve()==True:ans=[0]ans+=list(g.get_model())now=0the_ans=[1]for i in range(1,vertices_number+1):if(ans[i]==i):now=ithe_ans+=[now]while(True):if(ans[(now-1)*vertices_number+1]==(now-1)*vertices_number+1):breakfor i in range(vertices_number):if(ans[(now-1)*vertices_number+1+i]==(now-1)*vertices_number+1+i):now=i+1the_ans+=[now]breakls=list()for i in range(1,vertices_number*vertices_number+1):if ans[i]==i:ls+=[-i]g.add_clause(ls)if len(the_ans)!=vertices_number:continue;else:flag=1for i in range(vertices_number):print(the_ans[i],end=' ')print(1)if flag==0:print('NO')  

sat求解器解哈密顿回路相关推荐

  1. 从零开始编写SAT求解器(一)

    从零开始编写SAT求解器(一) 从零开始编写SAT求解器(一) 源起 背景知识 SAT问题 DIMACS文件 DPLL算法 项目架构 从零开始编写SAT求解器(一) 源起 最近在github上看到了非 ...

  2. windows下编译以及运行cryptominisat 求解器(sat求解器)

    cryptominisat是由msoos所开发的一款sat求解器,sat的具体问题另外一篇博客里有详细介绍点击打开链接,本篇文章只介绍如何在windows下运行cryptominisat,将自己遇到的 ...

  3. 求解器解的最优性 | cplex、gurobi和COPT求解器求解出来的一定是最优解吗?有理论证明吗?

    求解器解的最优性 | cplex.gurobi和COPT求解器求解出来的一定是最优解吗?有理论证明吗? 作者: 刘兴禄,清华大学,清华-伯克利深圳学院博士在读 欢迎关注我们的微信公众号 运小筹 之前有 ...

  4. 基于DPLL的SAT求解器

    SAT问题 什么是SAT问题? SAT问题即命题逻辑公式的可满足性问题(satisfiability problem),是计算机科学与人工智能基本问题,是一个典型的NP完全问题. 对于任一布尔变元x, ...

  5. 2-2 组合优化问题-常用模型与通用求解器

    组合优化问题常用模型 组合优化问题常常难以求解,我们可以把这些转化为目前已经有成熟求解器的模型. 1. 可满足性问题(Satisfiability, SAT) 上一节已经讲过,SAT 是一个 NPC ...

  6. 关于求解微分方程——初学Matlab里的 ODE求解器

    学习背景 最近想挖掘一下自己项目的理论深度,于是找到了老师.在老师的建议下,我们开始了漫长的研读老师的论文的旅程(论文名:Optimal Design of Adaptive Robust Contr ...

  7. Flow Free solver[连线游戏求解器]

    Fast automated solver for Flow Free puzzles written in C.  用C语言编写的连线游戏的快速自动求解器. GIF of the final pro ...

  8. 线性规划整数规划求解器SCIP的失败使用 与 GLPK的成功使用

    因本人科研需要,需要使用这两个求解器解数学模型. 本人的实现平台为window10,64位,基于C++,且之前已安装Visual Studio 2015. 但是SCIP的使用建议使用Linux,感觉可 ...

  9. 斗地主残局破解算法,斗地主残局暴力求解器算法,秒解各种斗地主残局

    斗地主残局破解,斗地主残局暴力求解器,秒解各种斗地主残局 秒解抖音.微信等各大平台的斗地主残局挑战 支持自定义出牌规则 输入双方的牌后单击"开始求解"按钮即可 求解完成后,电脑会自 ...

最新文章

  1. 三次握手和四次断开问题
  2. 单例模式的几种实现方式及优缺点
  3. Linux-find命令
  4. 搞懂 SynchronizationContext
  5. phpcmsV9 公告内容(图片不显示问题)
  6. OSChina 周二乱弹 ——有时醒来发现身边是不同的姑娘
  7. MATLAB中的视角处理
  8. 【渝粤教育】电大中专金融与税收_1作业 题库
  9. ros学习-中国大学MOOC---《机器人操作系统入门》课程讲义
  10. UFS的Command Queue
  11. Rose出现 “relation from A to B would cause an Invalid circular inheritance解决方法。
  12. 【5G基础知识】5G网络的架构分析
  13. 茜色的坂道SP线是啥鸟语?3级E文果然功力不够
  14. 微信小程序详细图文讲解
  15. 手机密码用计算机怎么解锁,手机忘记开机密码怎么办,有这四招1分钟就搞定...
  16. Vue2速成手册(原创不易,转载请注明出处)
  17. python pickle反序列化漏洞_Python反序列化漏洞
  18. mysql 根据某一年 查询12个月的数据
  19. D-ID生成式人工智能视频合成技术,将原创视频内容变得唾手可得
  20. Outlook设置Gmail邮箱步骤

热门文章

  1. 基于Java实现的MD5算法实现
  2. 南华大学计算机系宿舍,南华大学宿舍条件,宿舍环境图片(10篇)
  3. 自我反思--table的简单数据分页
  4. DataLoad命令集
  5. 微信为什么没有城市服务器,微信没有城市服务怎么办?微信添加城市服务的教程...
  6. AcrelCloud-1000变电所运维云平台一个智能的、适应时代变化发展的运维管理系统
  7. Matlab中如何对曲线进行微分,Excel 微分(怎么用excel做一阶微分)
  8. 硬盘数据误格式化能恢复吗
  9. 通达信行情数据获取--python_股票量化交易-获取数据的两种方法
  10. EXt的数据加载与展示