回朔法之图着色问题

来源:互联网 发布:动画制作软件手机版 编辑:程序博客网 时间:2024/06/11 20:46

给定无向连通图G=(V,E),求最小的整数m,用m种颜色对G中的顶点着色,使得任意两个相邻顶点着色

// 0515.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>using namespace std;static int arc[100][100];//建立全局变量 arc[][]储存顶点之间边的情况static int color[100];//color[]存储n个顶点的着色情况int Ok(int k){for(int i=0; i<k; i++)if(arc[k][i]==1 && color[i]==color[k])return 0;return 1;}void GraphColor(int n,int m){int i,k;for(i=0; i<n; i++)color[i]=0;k=0;while(k>=0){color[k]=color[k]+1;while(color[k]<=m)if(Ok(k))break;else color[k]=color[k]+1;if(color[k]<=m && k==n-1){for(i=0; i<n; i++)cout<<color[i]<<" ";return;}if(color[k]<=m && k<n-1)k=k+1;elsecolor[k--]=0;}}int main(){cout<<"输入颜色的个数:";int m;cin>>m;cout<<"输入顶点个数:";int n;cin>>n;cout<<"输入无向图点和边的关系:"<<endl;for(int i=0; i<n; i++)for(int j=0; j<n; j++){int a;cin>>a;arc[i][j]=a;}GraphColor(n,m);return 0;}


原创粉丝点击