/*
图的着色问题:
给定无向图G(V,E),用m种颜色为图中每个
顶点着色,要求每个顶点着一种颜色,并
且使得相邻两个顶点之间的颜色不同
分析:
用一个n元组描述图的一种颜色(x1,x2,...,xn),xi属于[1,m],1<=i<=n
为了用m种颜色对n个顶点着色,就有m^n中可能颜色组合,状态空间树是高度为n
的完全m叉树
约束方程:
x[i] != x[j],若顶点i与顶点j相邻 <=>a[i][j] = 1
算法分析:
使用一个n元的一维数组
1判断当前元素是否与前面的元素存在重复
2如果颜色个数超出限制,那么使颜色的使用颜色为0,然后同时
输入:(用1表示相邻,用0表示不相邻)
5 3
0 1 1 0 0
1 0 1 1 1
1 1 0 0 1
0 1 0 0 1
0 1 1 1 0
输出:
1 2 3 3 1
*/
/*
关键:
1 //为颜色付初始值,后面会累加到1,表示采用1号颜色
for(int i = 0 ; i < n ; i++)
{
pResult[i] = 0;
2 //检测当前节点是否与之前出现的节点颜色相同;若相同,则累加颜色数,并且是作为循环判断的,因为不行的话,肯定要与下面的其他颜色进行比较,
//直至与其他颜色没有冲突为止
while(pResult[k] <= m && isSameColor(k,iArr,pResult))
{
pResult[k]++;
3 //判断是否到循环出口,如果颜色数没有超过,说明是因为两个颜色不同而退出
if(pResult[k] <
算法设计与分析:第五章 回溯法 5.3图的着色问题
最新推荐文章于 2024-07-07 21:33:48 发布
本文介绍了如何使用回溯法解决图的着色问题,以确保无向图的相邻顶点颜色不同。通过建立状态空间树并进行深度优先搜索,避免颜色冲突。文章提供了一个C语言实现的算法,包括初始化、颜色冲突检测和回溯过程。
摘要由CSDN通过智能技术生成