码迷,mamicode.com
首页 > 其他好文 > 详细

图的 m 着色问题

时间:2021-06-02 19:18:25      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:height   设计   max   lazy   表示   hub   turn   return   mamicode   

1. 

图的 m 着色问题。给定无向连通图 G m 种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求 G 的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。

 

2. 解析

G n 个顶点,将顶点编号为1 ,2 ,... ,n ,则搜索空间为深度nm 叉完全树,将颜色编号为1 , 2 ,... ,m ,结点<x1 ,x2 ,... ,xk>(x1 ,x2 ,... ,xk ?{1, ... ,m},1 ≤ k ≤ n)表示顶点1的颜色x1 ,顶点2的颜色x2 ,... ,顶点k的颜色xk .

 

实例:4顶点,4颜色

四叉树:

技术图片

 

 

 

3. 设计

n //顶点数

m //颜色

c[MAX][MAX] //邻接矩阵,01表示两点之间是否连通

color[MAX] //初始值0,1-m代表颜色

Flag=0 //初始表示不存在填色方法

  1. 输入n,m,c[]
  2. OK

If点相邻且颜色相同then return false

Else return true

  1. FillColor

(1) 初始化color[]0,表示尚未填色

(2) While:遍历n层:

WhileIf k种颜色<=m 且连通 then return break

Else 下一种颜色

If(color[k]<=m&&k==n) then 输出该种填色方法,flag=1

Else if(color[k]<=m&&k<n) then k++,向下遍历

Else color[k]=0,k--,回溯

 

If flag=0 then 输出NO

技术图片

 

 

 技术图片

4. 分析

 

m是颜色数,n是顶点数

结点数=

 

 

 技术图片

每个结点和其他结点进行n-1次比较

5. 源码

https://github.com/2579081436/algorithm.github.io

 

图的 m 着色问题

标签:height   设计   max   lazy   表示   hub   turn   return   mamicode   

原文地址:https://www.cnblogs.com/-happy-/p/14833213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!