首页 > 代码库 > 染色问题的算法(转)
染色问题的算法(转)
#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
染色问题的算法(转)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。