Python基于回溯法子集树模板解决m着色问题示例


Posted in Python onSeptember 07, 2017

本文实例讲述了Python基于回溯法子集树模板解决m着色问题。分享给大家供大家参考,具体如下:

问题

图的m-着色判定问题

给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色?

图的m-着色优化问题

若一个图最少需要m种颜色才能使图中任意相邻的2个顶点着不同颜色,则称这个数m为该图的色数。求一个图的最小色数m的问题称为m-着色优化问题。

Python基于回溯法子集树模板解决m着色问题示例

分析

解的长度是固定的,n。若x为本问题的一个解,则x[i]表示第i个节点的涂色编号。

可以将m种颜色看作每个节点的状态空间。每到一个节点,遍历所有颜色,剪枝,回溯。

不难看出,可以套用回溯法子集树模板。

代码

'''图的m着色问题'''
# 用邻接表表示图
n = 5 # 节点数
a,b,c,d,e = range(n) # 节点名称
graph = [
  {b,c,d},
  {a,c,d,e},
  {a,b,d},
  {a,b,c,e},
  {b,d}
]
m = 4 # m种颜色
x = [0]*n # 一个解(n元数组,长度固定)注意:解x的下标就是a,b,c,d,e!!!
X = []   # 一组解
# 冲突检测
def conflict(k):
  global n,graph,x
  # 找出第k个节点前面已经涂色的邻接节点
  nodes = [node for node in range(k) if node in graph[k]]
  if x[k] in [x[node] for node in nodes]: # 已经有相邻节点涂了这种颜色
    return True
  return False # 无冲突
# 图的m着色(全部解)
def dfs(k): # 到达(解x的)第k个节点
  global n,m,graph,x,X
  if k == n: # 解的长度超出
    print(x)
    #X.append(x[:])
  else:
    for color in range(m): # 遍历节点k的可涂颜色编号(状态空间),全都一样
      x[k] = color
      if not conflict(k): # 剪枝
        dfs(k+1)
# 测试
dfs(a)  # 从节点a开始

效果图

Python基于回溯法子集树模板解决m着色问题示例

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python进阶教程之函数参数的多种传递方法
Aug 30 Python
python使用webbrowser浏览指定url的方法
Apr 04 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
Jun 11 Python
python内置数据类型之列表操作
Nov 12 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
Dec 13 Python
创建Django项目图文实例详解
Jun 06 Python
python基于Selenium的web自动化框架
Jul 14 Python
python 计算两个列表的相关系数的实现
Aug 29 Python
NumPy排序的实现
Jan 21 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
Feb 20 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
python中利用Future对象异步返回结果示例代码
Sep 07 #Python
python中利用Future对象回调别的函数示例代码
Sep 07 #Python
Python标准库之itertools库的使用方法
Sep 07 #Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 #Python
教你学会使用Python正则表达式
Sep 07 #Python
Python基础学习之常见的内建函数整理
Sep 06 #Python
Python升级导致yum、pip报错的解决方法
Sep 06 #Python
You might like
php的控制语句
2006/10/09 PHP
php中计算程序运行时间的类代码
2012/11/03 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
PHP可变变量学习小结
2015/11/29 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
php中的依赖注入实例详解
2019/08/14 PHP
比Jquery的document.ready更快的方法
2010/04/28 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
JavaScript判断微信浏览器实例代码
2016/06/13 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
浅谈Angular7 项目开发总结
2018/12/19 Javascript
[19:26]TNC vs EG (BO3)
2018/06/07 DOTA
Python压缩和解压缩zip文件
2015/02/14 Python
python requests 使用快速入门
2017/08/31 Python
TensorFlow的权值更新方法
2018/06/14 Python
python opencv实现简易画图板
2020/08/27 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
医院护士求职自荐信格式
2013/09/21 职场文书
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
旅游网创业计划书
2014/01/31 职场文书
国培远程培训感言
2014/03/08 职场文书
环保建议书400字
2014/05/14 职场文书
个人授权委托书样本
2014/09/13 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
总经理助理岗位职责
2015/01/31 职场文书
英语教师个人总结
2015/02/09 职场文书
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL