给定无向连通图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;
else
color[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;
}