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之大话题小函数(1)
Oct 10 Python
python实现逆波兰计算表达式实例详解
May 06 Python
Python判断列表是否已排序的各种方法及其性能分析
Jun 20 Python
Python 性能优化技巧总结
Nov 01 Python
python web基础之加载静态文件实例
Mar 20 Python
python 信息同时输出到控制台与文件的实例讲解
May 11 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
TensorFLow 变量命名空间实例
Feb 11 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
DataFrame 数据合并实现(merge,join,concat)
Jun 14 Python
python实现登录与注册系统
Nov 30 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 sprintf()函数让你的sql操作更安全
2008/07/23 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
laravel withCount 统计关联数量的方法
2019/10/10 PHP
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
Python中的fileinput模块的简单实用示例
2015/07/09 Python
Python中条件判断语句的简单使用方法
2015/08/21 Python
python抓取搜狗微信公众号文章
2019/04/01 Python
python如何保证输入键入数字的方法
2019/08/23 Python
django连接mysql数据库及建表操作实例详解
2019/12/10 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
欧洲品牌瓷器餐具网上商店:Porzellantreff.de
2018/04/04 全球购物
介绍一下游标
2012/01/10 面试题
财务出纳员岗位职责
2013/11/26 职场文书
全民健身日活动方案
2014/01/29 职场文书
采购部部长岗位职责
2014/02/06 职场文书
竞选部门副经理的自荐书范文
2014/02/11 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
2014国庆节国旗下演讲稿(精选版)
2014/09/26 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
Python操作CSV格式文件的方法大全
2021/07/15 Python