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 专题四 文件基础知识
Mar 20 Python
django轻松使用富文本编辑器CKEditor的方法
Mar 30 Python
python 2.7.14安装图文教程
Apr 08 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
Jul 15 Python
解决python中导入win32com.client出错的问题
Jul 26 Python
python Django的web开发实例(入门)
Jul 31 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
Java文件与类动手动脑实例详解
Nov 10 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
Apr 14 Python
详解python中groupby函数通俗易懂
May 14 Python
在python下实现word2vec词向量训练与加载实例
Jun 09 Python
python中的测试框架
Nov 13 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
比file_get_contents稳定的curl_get_contents分享
2012/01/11 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
php实现可逆加密的方法
2015/08/11 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
php实现基于openssl的加密解密方法
2016/09/30 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
js实现四舍五入完全保留两位小数的方法
2016/08/02 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
Python函数嵌套实例
2014/09/23 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
Python assert语句的简单使用示例
2019/07/28 Python
python计算无向图节点度的实例代码
2019/11/22 Python
python-numpy-指数分布实例详解
2019/12/07 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
django使用graphql的实例
2020/09/02 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
法务专员岗位职责
2014/01/02 职场文书
家长对老师的感言
2014/03/11 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
学生检讨书范文
2015/01/27 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
海上钢琴师观后感
2015/06/03 职场文书
Nginx使用Lua模块实现WAF的原理解析
2021/09/04 Servers
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python