首页 > 代码库 > 染色问题的算法(转)

染色问题的算法(转)

#include<iostream> #define NUM 5 using namespace  std;  bool ok(int i,int b[],int a[NUM][NUM]) { for(int j=0;j<i;j++)   if(a[i][j]==1&&b[i]==b[j])       return false; return true; } void backtrackcoloring(int i,int vertexnum,int &sum,int a[NUM][NUM]) {     int n=vertexnum;     int *b=new int[n];     if(i>n)         sum++;     else     {         for(int j=0;j<4;j++)         {    b[i]=j;            if(ok(i,b,a))                backtrackcoloring(i+1,vertexnum,&sum,a);         }     } } int main() {     int sum=0;     int m,n;     int a[NUM][NUM];     int linenum=8;     int vertexnum=5;     for(int i=0;i<NUM;i++)         for(int j=0;j<NUM;j++)         {             a[i][j]=0;             a[j][i]=0;         }     for(i=0;i<8;i++)     {             cin>>m>>n;         a[m][n]=1;         a[n][m]=1;     }     backtrackcoloring(0,vertexnum,&sum,a);     cout<<sum<<endl;     return 0; }

 

枚举遍历法...还以为是基于dfs遍历的

ps:手机编辑,排版不好...

原文:http://m.blog.csdn.net/article/details?id=26163067

 

下面的这个与上面的思路一样,代码是非递规的,虽然代码比较锉,可以看看作为参考。

链接:http://m.blog.csdn.net/article/details?id=17641017

 

染色问题的算法(转)