图的m着色问题
来源:互联网 发布:打击垫软件fade 编辑:程序博客网 时间:2024/05/21 06:52
/*******************************************************//* 图的m着色问题 *//*给定无向图G=(V,E),用m中颜色为图中每个顶点着色,要求 每个顶点着一种颜色,并使相邻两个顶点之间具有不同的颜色*//*******************************************************/#include<iostream>#define N 15 //最多顶点数#define M 10 //最多颜色数using namespace std;int main(){/*函数声明*/void creat_c(char B[], bool c[][M + 1], int n);void show_x(int x[], int n);bool ok(int x[], int k, bool c[][M+1], int n);void m_coloring(int count, int n, int m, int x[], bool c[][M+1]);int n, m; //顶点个数n,颜色个数mcout << "请输入图的顶点个数(不超过15)及颜色个数(不超过10)分别为:";cin >> n >> m;char B[N + 1] ={'a','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O'};bool(*c)[M + 1] = new bool[N + 1][M + 1]; //图的邻接关系cout << "\n请输入图<i,j>顶点若有边,则输1,否则输0:\n";creat_c(B,c,n); //输入图的邻接关系int count = 0; //解个数赋初值0int *x = new int[N+ 1]; //定义解向量cout << "图的"<<m<<"着色问题的解向量分别为:\n";m_coloring(count,n,m,x,c); //图的m着色 回溯法求解 解向量system("pause");return 0;}/*输入图的邻接关系*/void creat_c(char B[],bool c[][M + 1], int n){for (int i = 1; i <= n; i++){for (int j = 1; j <= i; j++){if (i == j){ //自身到自身,无关系c[i][j] = false;continue;}cout << "边<" << B[i] << "," << B[j] << ">: ";cin >>c[i][j];c[j][i] = c[i][j]; //无向图,邻接关系对称}}cout << endl;}/*打印解向量*/void show_x(int x[], int n){cout << x[1];for (int i = 2; i <= n; i++)cout << "->" << x[i];cout << endl;}/*判断当前顶点的着色是否为有效着色*/bool ok(int x[], int k, bool c[][M + 1], int n){for (int i = 1; i<=k; i++){if (c[k][i] && (x[k] == x[i]))return false;}return true;}/*图的m着色 回溯法求解 解向量*/void m_coloring(int count, int n, int m, int x[], bool c[][M + 1]){int k = 1;x[1] = 0;while (k>0){x[k] = x[k] + 1; //从第一种颜色开始着色while ((x[k] <= m) && (!ok(x, k, c, n))) //判断当前顶点着色是否有效x[k] = x[k] + 1; //不满足,换下一种颜色if (x[k] <= m){if (k == n ){ //如果是最后一个顶点show_x(x, n); count++; //打印此解,并统计个数}else{k++; x[k] = 0; //不是,则处理下一个顶点}}else{x[k] = 0; k--; //第k顶点颜色复位为0,回溯到前一顶点}}cout << "共有" << count << "个解!\n\n";}
0 0
- 图的M着色问题
- 图的M着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- 图的m着色问题
- m图着色问题
- m图着色问题
- BZOJ1045 糖果传递
- WebService、soap、gsoap基本概念
- Sae中mysql的初步使用
- Git常用命令
- hdu 2010
- 图的m着色问题
- WPF 仿wp8加载动画效果
- 我们的人生体验是由“时薪”——而不是“年薪”——决定的
- (八)Spark源码理解之DAGScheduler---part1
- 利用反射打开窗体
- Linux上配置2个tomcat
- 使用navicat工具将oracle数据导入到mysql
- 剑指offer第四题【重建二叉树】c++实现
- 奶粉各阶段成分表的规律