经典算法问题 之 图的m-着色判定问题
来源:互联网 发布:成都知美术馆 怎么去 编辑:程序博客网 时间:2024/05/02 03:51
图的m-着色判定问题——给定无向连通图G和m种不同的颜色。
图的m-着色优化问题——若一个图最少需要m种颜
色才能使图中任意相邻的2个顶点着不同颜色,则称这个数m为该图
输入 n k m n代表节点个数,k代表边的个数
随后跟着k行a b 代表 a b间有一个边相连接, m代表颜色的种类数m的大小
一定能符合着色的标准
输出:
输出最少的颜色数
样例输入:
5 8 6
1 3
1 2
1 4
2 3
2 4
2 5
3 4
4 5
样例输出:
4
本题是个经典的回溯问题,因为有m种颜色,所以可以依次试探m的值,看是否满足题目的条件于是一个for循环很自然的写出:
for(i=1--->m){
if(dfs(0,m))//0个块已填好颜色,m种颜色可选
输出m的值;
跳出循环;
}
#include<iostream>#include<cstdlib>#include<cstring>#include<vector>using namespace std;vector<int>v[10];//vactor 建图int color[10];int n,k,m;int floag;//成功找到的标志变量int IsSame(int node,int col){//判断颜色是否有冲突for(int i=0;i<v[node].size();i++){if(color[v[node][i]]==col)return 1;}return 0;}int dfs(int node,int col){if(node==n){floag=1;return 1;}for(int i=1;i<=col;i++){//col种颜色,逐个填色if(!IsSame(node,i)){color[node]=i;dfs(node+1,col);if(floag)return 1;color[node]=0;}}return 0;}int main(){cin>>n>>k>>m;memset(color,0,sizeof(color));for(int i=0;i<k;i++){int x,y;cin>>x>>y;v[x].push_back(y);v[y].push_back(x);}for(int col=1;col<=m;col++){//memset(color,0,sizeof(color));if(dfs(0,col)){cout<<col<<endl;break;}}return 0;}
- 经典算法问题 之 图的m-着色判定问题
- 回溯算法----图的M着色问题
- 算法 图的M着色问题
- 回溯经典-m图着色问题
- 图的M着色问题
- 图的M着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 解决一道C++编程的小问题
- 黑马程序员:java函数
- mac linux上运行windows应用
- 文件与流2
- 极目眺望的tiantianguandan
- 经典算法问题 之 图的m-着色判定问题
- /Wp64(检测 64 位可迁移性问题)
- 数据库设计三大范式
- Makefile学习
- 模版与异常1
- 2web,1db,负载均衡,magento nginx配置
- 作为程序员,北漂的我有很多话想说。
- 模版与异常2
- hdu-2044一只小蜜蜂-递推