标签:height 设计 max lazy 表示 hub turn return mamicode
图的 m 着色问题。给定无向连通图 G 和 m 种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求 G 的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。
设 G 有 n 个顶点,将顶点编号为1 ,2 ,... ,n ,则搜索空间为深度n的m 叉完全树,将颜色编号为1 , 2 ,... ,m ,结点<x1 ,x2 ,... ,xk>(x1 ,x2 ,... ,xk ?{1, ... ,m},1 ≤ k ≤ n)表示顶点1的颜色x1 ,顶点2的颜色x2 ,... ,顶点k的颜色xk .
实例:4顶点,4颜色
四叉树:
n //顶点数
m //颜色数
c[MAX][MAX] //邻接矩阵,0、1表示两点之间是否连通
color[MAX] //初始值0,1-m代表颜色
Flag=0 //初始表示不存在填色方法
If点相邻且颜色相同then return false
Else return true
(1) 初始化color[]为0,表示尚未填色
(2) While:遍历n层:
While: If 第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
m是颜色数,n是顶点数
结点数=
每个结点和其他结点进行n-1次比较
https://github.com/2579081436/algorithm.github.io
标签:height 设计 max lazy 表示 hub turn return mamicode
原文地址:https://www.cnblogs.com/-happy-/p/14833213.html