实验报告12

1.问题.在这里插入图片描述

2.解析

在这里插入图片描述

3.设计

每次确定一个点的颜色, 先表示两点之间的关系和颜色。用m种颜色为无向图G=(V,E)着色,其中,V的顶点个数为n,可以用一个n元组x=(col1,col2,…,coln)来描述图的一种可能着色,其中,xi∈{1, 2,…, m},(1≤i≤n)表示赋予顶点i的颜色。例如,5元组(1, 2, 2, 3, 1)表示对具有5个顶点的无向图(a)的一种着色,顶点A着颜色1,顶点B着颜色2,顶点C着颜色2,如此等等。如果在n元组X中,所有相邻顶点都不会着相同颜色,就称此n元组为可行解,否则为无效解。容易看出,每个顶点可着颜色有m种选择,n个顶点就有mn种不同的着色方案,问题的解空间是一棵高度为n的完全m叉树,这里树高度的定义为从根节点到叶子节点的路径的长度。每个分支结点,都有m个儿子结点。最底层有mn个叶子结点。
void ff(int t) {
if (t > n) {
ans++;
return;
}
for (int i = 1; i <= m; i++) {
bool flag = 1;
for (int j = 1; j <= n; j++) {
if (mp[t][j] != -1 && i == mp[t][j]) {
flag = 0;
break;
}
}
if (flag) {
for (int j = 1; j <= n; j++) {
if (mp[t][j] != -1 && j != t) {
mp[j][t] = i;
}
}
ff(t + 1);
for (int j = 1; j <= n; j++) {
if (mp[t][j] != -1 && j != t) {
mp[j][t] = 0;
}
}
}
}
}

4.分析

时间复杂度:O(m*n^2)。

5.源码

https://github.com/Lillyooo/-Lily/blob/main/lab12.cpp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值