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 version 2.7 required, which was not found in the registry
Aug 26 Python
python实现挑选出来100以内的质数
Mar 24 Python
python获取一组数据里最大值max函数用法实例
May 26 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
Mar 19 Python
python中使用print输出中文的方法
Jul 16 Python
django框架自定义用户表操作示例
Aug 07 Python
python机器学习之KNN分类算法
Aug 29 Python
详解python分布式进程
Oct 08 Python
django+tornado实现实时查看远程日志的方法
Aug 12 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
Apr 16 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
Aug 26 Python
如何用python爬取微博热搜数据并保存
Feb 20 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缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
php实现通用的信用卡验证类
2015/03/24 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
php使用MySQL保存session会话的方法
2015/06/26 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
JavaScript 创建对象
2009/07/17 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
JS代码同步文本框内容的实例方法
2013/07/12 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
Jquery倒计时源码分享
2014/05/16 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
详谈javascript精度问题与调整
2017/07/08 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
Python中使用ElementTree解析XML示例
2015/06/02 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
凯特·丝蓓英国官网:Kate Spade英国
2016/11/07 全球购物
美国女孩服装购物网站:Justice
2017/03/04 全球购物
测绘工程个人的自我评价
2013/11/10 职场文书
党风廉设责任书
2014/04/16 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
解除租房协议书
2014/12/03 职场文书
《检阅》教学反思
2016/02/22 职场文书
python通过函数名调用函数的几种方法总结
2021/06/07 Python