图的着色问题

1、问题描述

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

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

2、找一个图的所有m-着色方案

procedure MCOLORING( k )

∥这是图着色的一个递归回溯算法。图G 用它的布尔邻接矩阵GRAP H(1∶n , 1∶  n)表示∥

∥它计算并打印出符合以下要求的全部解, 把整数1 , 2 , ⋯  ,m 分配给图中∥

∥各个结点且使相邻近的结点的有不同的整数。k 是下一个要着色结点的下标∥

global integer m, n , X(1∶  n)   boolean GRAPH (1∶n  , 1∶n)

integer k

loop ∥产生对X( k)所有的合法赋值∥

call  NEXTVALUE( k) ∥将一种合法的颜色分配给X( k) ∥

if  X( k) = 0 then exit endif ∥没有可用的颜色了∥

if  k = n

then  print ( X) ∥至多用了m 种颜色分配给n 个结点∥

else  call MCOLORING( k + 1 ) ∥所有m-着色方案均在此反复递归调用中产生∥

endif

repeat

end MCOLORING

在最初调用callMCOLORING(1)之前, 应对图的邻接矩阵置初值并对数组X置0值。在确定了X(1)到X(k-1)的颜色之后,过程NEXTVALUE从这m种颜色中挑选一种符合要求的颜色, 并把它分配给X(k) , 若无可用的颜色, 则返回X(k) = 0。

3、获取下一种颜色

procedure NEXTVALUE( k)

∥进入此过程前X(1) , ⋯ , X( k - 1 )已分得了区域[ 1 , m] 中的整数且相邻近的结点有不同的

整数。本过程在区域[0 ,m] 中给X( k )确定一个值:如果还剩下一些颜色, 它们与结点k 邻

接的结点分配的颜色不同, 就将其中最高标值的颜色分配给结点k ;如果没剩下可用的颜

色, 则置X( k) 为0∥

global integer m, n , X(1∶n)  boolean GRAP H(1∶n , 1∶  n)

integer j , k

loop

X(k) ←(X(k) + 1 ) mod (m + 1) ∥试验下一个最高标值的颜色∥

if X( k ) = 0 then return endif ∥全部颜色用完∥

for j←1 to n do ∥检查此颜色是否与邻近结点的那些颜色不同∥

if GRAPH( k , j ) and ∥如果( k , j )是一条边∥

X(k) = X(j) ∥并且邻近的结点有相同的颜色∥

then exit endif

repeat

if j = n + 1 then return endif ∥找到一种新颜色∥

repeat ∥否则试着找另一种颜色∥

end NEXTVALUE

4、例子

转载于:https://my.oschina.net/wangshengzhuang/blog/785140

回溯法----图的着色问题相关推荐

  1. 回溯法-图的m着色问题

    本文参考https://blog.csdn.net/kevin_cyj/article/details/50385575 问题描述与思想概述 (1).问题的提出        给定无向连通图G和m种不 ...

  2. 回溯法求解图着色问题

    回溯法求解图着色问题 #include <iostream> #include <cstdlib> using namespace std; #define n 5 #defi ...

  3. 图着色问题回溯法(最通俗易懂)

    图着色问题描述: 对于给定无向连通图G=(V,E),求至少用多少种颜色对G中的顶点进行着色,使得任意两个顶点的着色不同. 回溯法描述: 回溯法的本质其实就是一种蛮力法,只是通过一定的方法可以使得蛮力法 ...

  4. 图的m着色问题——回溯法及其优化(变量排序MRV, 值排序MCV, 前向检查ForwardChecking, 智能回溯, 边相容,K阶相容)python C++实现

    文章目录 图的m着色问题背景 背景知识 问题描述 回溯法的原理及其实现 回溯法基本思想 朴素回溯法解决图的m着色问题 回溯优化策略 回溯法优化--变量排序MRV 回溯法优化--值排序MCV 回溯法优化 ...

  5. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  6. 回溯法求解K图染色问题(java版)

    回溯法:K图着色问题 问题描述: 问题分析: 伪代码: 局限性 具体实现 问题描述: 对如图 1 所示的图,采用局部搜索算法,求其对应的 3 着色方案. 问题分析: 题目的目标是用3种颜色,将图1中的 ...

  7. python回溯方法的模板_实例讲解Python基于回溯法子集树模板实现图的遍历功能

    这篇文章主要介绍了Python基于回溯法子集树模板实现图的遍历功能,结合实例形式分析了Python使用回溯法子集树模板针对图形遍历问题的相关操作技巧与注意事项,需要的朋友可以参考下 本文实例讲述了Py ...

  8. 回溯法采用的搜索策略_17图的搜索算法之回溯法

    回 溯 法 回溯算法实际是一个类似枚举的搜索尝试方法,它的主题思想是在搜索尝试中找问题的解,当不满足求解条件就"回溯"返回,尝试别的路径.回溯算法是尝试搜索算法中最为基本的一种算法 ...

  9. 【算法分析】实验 4. 回溯法求解0-1背包等问题

    目录 实验内容 实验目的 实验结果 步骤1:描述与分析 步骤2:策略以及数据结构 步骤3 步骤4 步骤5 步骤6 实验总结 实验内容 本实验要求基于算法设计与分析的一般过程(即待求解问题的描述.算法设 ...

最新文章

  1. 新年新气象,2008年是我创业关键的一年!
  2. figure diagram illustrate exemplify profile
  3. boost::graph模块使用breadth_first_search()实现GGCL算法的测试程序
  4. SQL注入:4、数据库可写
  5. android 底部弹窗失效,Android实现从底部弹出Dialog(和PopWindow实现的效果同样)
  6. 【iOS】使用storyboard界面跳转报错:unrecognized selector sent to instance 0x7
  7. 《视觉开发专题》之 OpenGL 概述
  8. HDU1013 POJ1519 Digital Roots(解法三)【废除!!!】
  9. 【第一部分】04Leetcode刷题
  10. Java Socket聊天室
  11. php实现幻灯片效果,flash幻灯片切换效果代码,超简单超实用
  12. 参数构造错误 微信_微信公众号开发常见问题
  13. 大数据开发超高频面试题!大厂面试必看!包含Hadoop、zookeeper、Hive、flume、kafka、Hbase、flink、spark、数仓等
  14. centos 8 使用 nmcli 配置网桥Bridge(最后有踩坑过程)
  15. 给图像添加相框、圆形圆角显示图片、图像合成知识
  16. 码农:用git怕丢代码,每次都备份,同事:不学习的人真可怕!
  17. 5.5 jmeter组件—取样器
  18. FastDDS Getting Started (1) 运行HelloWorldExample并创建Fast DDS publisher
  19. 再现“换桥奇迹”|人大金仓助力大型运营商完成营销系统国产化升级
  20. Android Socket(ClientServer)

热门文章

  1. Microchip Studio 7 程序的烧录操作
  2. MacBook Pro 触控栏不能正常使用怎么解决
  3. 春风十里,不如见到你
  4. 安卓控件之竖向进度条
  5. 简单制作视频画面水平镜像播放特效
  6. Groovy语言 Grails框架入门
  7. 工作十二年后,开始学习人生第十四种编程语言
  8. 极智AI | 目标检测实现分享二:听说克莱今天复出了?详解 YOLOv2 算法与克莱检测
  9. 简单实用:可以祛斑的食物 - 生活至上,美容至尚!
  10. 同一局域网内手机访问电脑本地localhost网页