网络优化3|染色问题|旅行商问题

顶点染色问题

染色问题起源

染色问题起源于四色猜想。1852年,毕业于伦敦大学的格斯里(FrancisGuthrie)来到一家科研单位搞地图着色工作时,发现每幅地图都可以只用四种颜色染色。
1976年6月,在美国伊利诺斯大学的两台不同的电子计算机上,用了1200个小时,作了100亿个判断,结果没有一张地图是需要五色的,最终证明了四色定理。第一个计算机解是由美国数学家Appel和Haken与运用计算机的专家Kock三人合作的成果。
![[Pasted image 20240826213948.png]]

取面上任意一点作为图的顶点,若两个面有一条公共边,则它们对应的顶点有一条边。经过这样的转化地图染色问题中对面的染色就变成了对新图中的顶点染色,且要求任意两个相邻的顶点不能染同一色。

顶点染色

定理1:对任意的图G均有X(G)≤Δ+1X(G)\le \Delta+1X(G)Δ+1,其中X(G)X(G)X(G)为图G的色数,即能够给图G染色的最小颜色数;△为图G的最大度。
![[Pasted image 20240826214127.png]]

Δ(G)=3, X(G)=4 \Delta(G)=3,\ X(G)=4 Δ(G)=3, X(G)=4
定理2:设G是连通图。
假定G既不是完全图又不是奇圈,则X(G)≤ΔX(G)\le \DeltaX(G)Δ
![[Pasted image 20240826214533.png]]

Δ(G)=2, X(G)=2 \Delta(G)=2,\ X(G)=2 Δ(G)=2, X(G)=2
![[Pasted image 20240826214505.png]]

Δ(G)=2, X(G)=3 \Delta(G)=2,\ X(G)=3 Δ(G)=2, X(G)=3
定理3:对任意的图G,若存在k-团为子图,则X(G)≥kX(G)\ge kX(G)k。 k-团就是k个顶点组成的完全图
![[Pasted image 20240826214659.png]]

v1,v4,v5v_{1},v_{4},v_{5}v1,v4,v5构成一个3-团
X(G)≥3X(G)\ge 3X(G)3

Welsh-Powell算法
  1. 将图G的顶点按度数递减排列;
  2. 对第一个顶点及其不邻接的顶点染第一个颜色;
  3. 对尚未染色的第一个及其不邻接的顶点染第二个颜色;续行此法,直到全部顶点染色完为止
    ![[Pasted image 20240826215032.png]]

首先计算各个顶点的度
d(v1)=4, d(v2)=4, d(v3)=3, d(v4)=3 d(v_{1})=4,\ d(v_{2})=4,\ d(v_{3})=3,\ d(v_{4})=3 d(v1)=4, d(v2)=4, d(v3)=3, d(v4)=3
d(v5)=2, d(v6)=2 d(v_{5})=2,\ d(v_{6})=2 d(v5)=2, d(v6)=2
然后,根据顶点度从大到小排序
V1 -V2 - V3- V4 - V5- V6
![[Pasted image 20240826215305.png]]

给顶点v1染上红色,然后再给所有不与v1相邻且彼此不相邻的顶点染上红色,这样的顶点只有v5,因此v5染上红色;
![[Pasted image 20240826215349.png]]

在剩下的顶点中,选度最大的顶点v2,给顶点v2染上绿色,然后再给所有不与v2相邻且彼此不相邻的顶点染上绿色,这样的顶点只有v6,因此v6染上绿色;
![[Pasted image 20240826215430.png]]

在剩下的顶点中,选度最大的顶点v3,给顶点v3染上黄色,然后再给所有不与v3相邻且彼此不相邻的顶点染上黄色,这样的顶点只有v4,因此v4染上黄色。

Welsh-Powell算法的Matlab实现
function [col ve] = ColorGraphf(g)
%输入:g图的邻接矩阵
%输出:col 着色数 ve 顶点着色情况 
n = size(g, 2); %顶点数
ve = zeros([1 n]); %顶点着色情况集合
ve(1) = 1; %第一个顶点着1色 
col = 0; %颜色初值
cnd = 1; %着色过的顶点数目
while cnd < n %是否所有顶点都着色
	col = col + 1;%下一种颜色,从第1种颜色开始,因此co1初值为0 
	for i = 2:n %搜索所有没着色的顶点
		if ve(i) == 0 %顶点i没有着色
			flag = 1; %假设它可以着第col种颜色
			%判断和i相邻的顶点中是否有着第col种颜色 
			for j = 1:n
				if g(i, j) == 1
					if ve(j) == col; %和i相邻的顶点j着第col种颜色
						flag = 0;%i不能着第col种颜色 
					end
				end
			end
			%i可以着第col种颜色
			if flag == 1
				ve(i) = col;
				cnd = cnd + 1; %着色的顶点数加1个
			end
		end
	end
end
s = [1 1 1 1 2 2 2 3 4]; 
t = [2 3 4 6 3 4 5 5 6]; 
g = graph(s, t);
ag = full(g.adjacency());
[col ve] = ColorGraphf(ag)

col = 3
ve = 1 2 3 3 1 2

染色问题的数学规划模型

顶点个数n,顶点的最大度Δ\DeltaΔ
引入0-1变量
xik={ 1, 当vi着第k种颜色时0, 否则, i=1,2,…,n; k=1,2,…,Δ+1 x_{ik}=\left\{\begin{matrix} 1,\ 当v_{i}着第k种颜色时 \\ 0,\ 否则, \end{matrix}\right.\ i=1,2,\dots,n;\ k=1,2,\dots,\Delta+1 xik={ 1, vi

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值