邻点可区别全染色算法及其matlab程序详解

#################本文为学习《图论算法及其MATLAB实现》的学习笔记#################

邻点可区别全染色:全染色后邻点邻边的颜色均不相同

  • 算法用途

给出简单图的染色数尽可能少的邻点可区别全染色方案

  • 算法思想

先对图进行全染色,得到染色方案后,对其不同顶点的颜色及关联边的颜色所构成的集合进行判断。

若均不相同,则返回全染色方案。

若两个集合相同,则对其中一个顶点进行重新染色。

  • 程序参数说明

M: 任意图的邻接矩阵; 
k: 染色数
C: 顶点染色方案
W: 图边集合的染色方案,以矩阵形式输出

  • 算法的matlab程序详解

其中调用的全染色方案程序 graphcodf.m 见《全染色算法及其matlab程序详解》

function [k,C,W] = graphdiscodf(M)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%% 邻点可区别全染色算法 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%% 输入:     M: 任意图的邻接矩阵; 
%%%%%%%%% 输出:     k: 染色数
%%%%%%%%%            C: 顶点染色方案
%%%%%%%%%            W: 图边集合的染色方案,以矩阵形式输出
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[k,C,W] = graphcodf(M);     % 得到图的全染色方案
n = size(M,1);              % 得到 M 的行数,即顶点数
C1 = [C' W];                % 将 C 转置与 W 组合成新的矩阵
k1 = max(max(C1))+1;        % k1 为最大色号+1
k2 = k1;
for i = 1:n
    for j = (i+1):n
        tms = setdiff(C1(i,:),C1(j,:));     % tms 为在 C1 第i行中而不在第j行中的元素,即判断两个集合是否相同
        if isempty(tms)     % 即两个集合相同
            C1(j,1) = k1;   % 对其中一个顶点进行重新染色
            k1 = k1+1;      % 更新染色数
        end
    end
end
k = k + k1 - k2;            % 得到染色数
C = C1(:,1)';               % 得到顶点染色方案
W = C1(:,2:(n+1));          % 得到边集合的染色方案

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值