贪心算法求解 图的m着色问题
创始人
2024-03-23 16:18:56

图的m色判定问题: 给定无向连通图Gm种颜色。用这些颜色为图G的各顶点着色.问是否存在着色方法,使得G中任2邻接点有不同颜色。

图的m色优化问题:给定无向连通图G,为图G的各顶点着色, 使图中任2邻接点着不同颜色,问最少需要几种颜色。所需的最少颜色的数目m称为该图的色数。

若图G是可平面图,则它的色数不超过4色(4色定理).

4色定理的应用:在一个平面或球面上的任何地图能够只用4种

颜色来着色使得相邻的国家在地图上着有不同颜色

任意图的着色

Welch Powell

a).将G的结点按照度数递减的次序排列.

b).用第一种颜色对第一个结点着色,并按照结点排列的次序 

   对与前面着色点不邻接的每一点着以相同颜色.

c).用第二种颜色对尚未着色的点重复步骤b).用第三种颜色

   继续这种作法, 直到所有点着色完为止.

[cpp]  view plain copy

  1. #include   
  2. #include   
  3. #include   
  4. #include   
  5. using namespacestd;  
  6.    
  7. int map[10][10];//邻接矩阵  
  8.    
  9. typedef structNode{ //定义节点结构体  
  10.    int index; //编号  
  11.    int degree; //度  
  12.    int color; //改节点的颜色  
  13. } Node;  
  14.    
  15. Nodenodes[10];  
  16.    
  17. bool com(Nodenode1,Nodenode2) { //按度从高到低排序  
  18.    return node1.degree > node2.degree;  
  19. }  
  20.    
  21. bool com2(Nodenode1,Nodenode2) { //按度从高到低排序  
  22.    return node1.index < node2.index;  
  23. }  
  24.    
  25. int main() {  
  26.    ifstream read;  
  27.    read.open("map.data");//map.data是存放数据的文件名  
  28.    int m, n;  
  29.    while (read >> m>> n) {  
  30.       for (int i = 0; i < m; i++) {//读入数据  
  31.          int degree = 0;  
  32.          for (int j = 0; j < n; j++) {  
  33.             read>> map[i][j];  
  34.             if (map[i][j])  
  35.                 degree++;  
  36.          }  
  37.          nodes[i].index = i;  
  38.          nodes[i].degree = degree;  
  39.          nodes[i].color = 0;  
  40.       }  
  41.    
  42.       //排序  
  43.       sort(nodes,nodes + m, com);  
  44.       int k = 0;//K 代表第几种颜色  
  45.       while (true) {  
  46.          k++;  
  47.          int i;  
  48.          for (i = 0; i < m; i++){//先找到第一个未着色的节点  
  49.             if (nodes[i].color == 0) {  
  50.                 nodes[i].color = k;  
  51.                 break;  
  52.             }  
  53.          }  
  54.          if (i == m)//循环退出的条件,所有节点都已着色  
  55.             break;  
  56.          //再把所有不和该节点相邻的节点着相同的颜色  
  57.          for(int j=0; j
  58.             if(nodes[j].color ==0 &&map[nodes[i].index][nodes[j].index] == 0  
  59.                    &&i!=j)  
  60.                 nodes[j].color = k;  
  61.          }  
  62.       }  
  63.    
  64.       //输出结果:  
  65.       sort(nodes,nodes + m, com2);  
  66.     cout << "共需要" << k-1 << "种颜色" << endl;  
  67.       for (int i = 0; i < m; i++)  
  68.          cout<< "节点:"<
  69.       return 0;  
  70.    }  
  71. }  

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...