实验报告
课程名称 《算法分析与设计》 实验日期 2021年5月31日 至 2021年 6 月 6 日
学生姓名 戴子博 所在班级 计算机194 学号 2019212212130
实验名称 图的m着色问题
实验地点 勤13-208 同组人员
1.问题
图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。
2.解析
在记录每一个顶点的颜色时检查每个与其相邻的顶点的颜色是否相同。如果不同则记录,如果相同则选择另一种颜色,如果颜色数量不够了,则回溯到上一个顶点。重复上述过程,直到所有顶点的颜色都已记录。
n代表顶点数量
color[n]代表第n个顶点记录的颜色
OK(t),检查t顶点的颜色与相邻顶点的颜色是否相同
3.设计
void Trackback(int t){
if(t>n){
count++;
for(int i=0;i<n;i++)
cout<<color[i];
cout<<endl;
}
else{
for(int i=0;i<m;i++){
color[t]=i;
if(OK(t))
Trackback(t+1);
color[t]=0;
}
}
}
4.分析
算法复杂度:O(n^m)
5.源码
博客地址:https://blog.csdn.net/shaojinfu?spm=1000.2115.3001.5343
github源码地址:https://github.com/CNFierceman/Algorithm_homework.git