python 回溯法 子集树模板 系列 —— 10、m着色问题

简介:

问题

图的m-着色判定问题

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

图的m-着色优化问题

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

709432-20170601182940508-307128189.png

分析

解的长度是固定的,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开始

效果图

709432-20170601195114649-1966695735.jpg

本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/6930276.html ,如需转载请自行联系原作者
相关文章
|
16天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
3月前
|
SQL 前端开发 JavaScript
Python 教程之 Django(10)模板
Python 教程之 Django(10)模板
34 0
|
3月前
|
Python
Python 采集77个教学课件PPT模板
Python 采集77个教学课件PPT模板
25 0
|
29天前
|
机器学习/深度学习 算法 数据挖掘
请解释Python中的决策树算法以及如何使用Sklearn库实现它。
决策树是监督学习算法,常用于分类和回归问题。Python的Sklearn库提供了决策树实现。以下是一步步创建决策树模型的简要步骤:导入所需库,加载数据集(如鸢尾花数据集),划分数据集为训练集和测试集,创建`DecisionTreeClassifier`,训练模型,预测测试集结果,最后通过`accuracy_score`评估模型性能。示例代码展示了这一过程。
|
2天前
|
机器学习/深度学习 存储 算法
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
25 7
|
2天前
|
机器学习/深度学习 数据可视化 算法
PYTHON用决策树分类预测糖尿病和可视化实例
PYTHON用决策树分类预测糖尿病和可视化实例
11 0
机器学习/深度学习 算法 Python
16 0
|
3天前
|
BI 开发者 数据格式
Python代码填充数据到word模板中
【4月更文挑战第16天】
|
3天前
|
机器学习/深度学习 算法 Python
python在Scikit-learn中用决策树和随机森林预测NBA获胜者
python在Scikit-learn中用决策树和随机森林预测NBA获胜者
13 0
|
1月前
|
XML 安全 测试技术
Jinja2:使用Python进行模板渲染的艺术
Jinja2:使用Python进行模板渲染的艺术