贪心法——图着色问题(非最优解)

问题

在这里插入图片描述

源码

/*
* problem: 图着色问题
* method: 贪心法(非最优解)
* date: 2020/05/12
*/
#include<iostream>
using namespace std;
const int MAX_N=20;
int arc[MAX_N][MAX_N]= {
 {0,1,0,0,0},
 {1,0,1,1,0},
 {0,1,0,0,1},
 {0,1,0,0,1},
 {0,0,1,1,0}
};
int color[MAX_N];
int n=5;
int Ok(int i) {
 for(int j=0; j<n; j++) {
  if(arc[i][j]==1&&color[i]==color[j])
   return 0;
 }
 return 1;
}
int ColorGraph(){
 int k=0,flag=1;
 while(flag){
  k++;
  flag=0;
  for(int i=0;i<n;i++){
   if(!color[i]){
    color[i]=k;
    if(!Ok(i)){
     color[i]=0;
     flag=1;
    }
   }
  }
 }
 return k;
}
int main() {
 cout<<"所需颜色种类数为:"<<ColorGraph()<<endl;
 return 0;
}

猜你喜欢

转载自blog.csdn.net/The_Only_God/article/details/106086908
今日推荐