博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图着色(回溯+剪枝)
阅读量:2259 次
发布时间:2019-05-09

本文共 1061 字,大约阅读时间需要 3 分钟。

图着色,第一行输入三个数,n,m,k,n为顶点数,m为颜色数,k为边数,n为行数,i到j有边,n小于等于20,输出各点颜色号,一行输出,空格分割,没有就输出NO

#include
#include
using namespace std;int m,n,k;int map[105][105];int color[105];int ans;//对于每个点,枚举它可能被染的颜色。如果与它相连的点颜色和它相同,那么就换下一个颜色;如果哪个颜色也不能选,那就回到上一个点换颜色(回溯),当确定完最后一个点的颜色后,这就是一个可行解,将答案增加1。void a(int p){//遍历图上任意点,因为没有确定编号n以后的点的颜色。所以到n-1就相对于把点全遍历一遍 if(p == n+1) { ans++; return; } else { for(int i=1;i<=m;i++) { int boo = false; for(int j=1;j<=p;j++) { if(map[p][j] == 1 && color[j] == i) { boo = true; break; } } if(boo == true) continue; color[p] = i; a(p+1); color[p] = 0; } }}int main(){ scanf("%d%d%d",&n,&k,&m); for(int i=1;i<=k;i++) { int d1,d2; scanf("%d%d",&d1,&d2); map[d1][d2] = 1; map[d2][d1] = 1; } a(1); if(ans != 0) printf("%d",ans); else printf("NO"); return 0;}

转载地址:http://crucb.baihongyu.com/

你可能感兴趣的文章
552. Student Attendance Record II(学生出勤记录 II)
查看>>
115. Distinct Subsequences(不同的子序列)
查看>>
123. Best Time to Buy and Sell Stock III(买卖股票的最佳时机)
查看>>
Spring中property-placeholder的使用与解析
查看>>
SpringBoot之神奇的properties&覆盖顺序
查看>>
SpringBoot中的application.properties外部注入覆盖
查看>>
spring boot 使用application.properties 进行外部配置
查看>>
Minor GC与Full GC分别在什么时候发生?
查看>>
Zookeeper学习系列【一】 教会你Zookeeper的一些基础概念
查看>>
浅谈MySQL架构体系
查看>>
OOM、调优工具、调优实战
查看>>
c语言常见的几种指针用法
查看>>
C/C++中的联合体
查看>>
C/C++联合体详解
查看>>
Java 生成 JNI 头文件
查看>>
JNI与实战内存池 JNI只看这一篇就够了
查看>>
C语言结构体、引用
查看>>
OOM、调优工具、调优实战(二)
查看>>
这篇文章上讲解的知识点你全搞明白了,Java中的字符串你就彻底理解了。
查看>>
内存池与JVM内存模型
查看>>