#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <cstdlib>
#define MAXSIZE 20
#define Minimum 10
using namespace std;
int Map[MAXSIZE][MAXSIZE];
int sum=0;
int largest=0;
int X[MAXSIZE];
//The function of reading a graph.
void readGraph()
{
//cout<<"Please input the filename";
//string filename;
ifstream fin("graph.txt");
const int LINE_LENGTH = 100;
char str[LINE_LENGTH];
while( fin.getline(str,LINE_LENGTH) )
{
int i,j,k;
i=(int)(str[0]-'0');
j=(int)(str[2]-'0');
Map[i][j]=1;
Map[j][i]=1;
k=(i>=j)?i:j;
largest=(largest>=k)?largest:k;
}
}
//The function of Printing.
void printGraph()
{
cout<<"The printing of the graph."<<endl;
for(int i=1;i<=largest;i++)
{
cout<<i<<"---";
for(int j=1;j<=largest;j++)
{
if(Map[i][j])
cout<<j<<",";
}
cout<<endl;
}
}
//The function of checking the color is valid.
bool isValid(int k)
{
for(int i=1;i<=largest;i++)
if((Map[k][i]==1)&&(X[k]==X[i]))
return false;
else
return true;
}
//The function that coloring the graph.
void Mcoloring(int k,int m)
{
if(k>largest)
{
sum++;
cout<<"The "<<setw(2)<<sum<<" solution is :";
for(int i=1;i<=largest;i++)
cout<<X[i]<<" ";
cout<<endl;
}
else
for(int i=1;i<=m;i++)
{
X[k]=i;
if(isValid(k))
Mcoloring(k+1,m);
}
}
//The main function.
int main()
{
readGraph();
printGraph();
cout<<"Please enter the color number you want to print:";
int m;
cin>>m;
Mcoloring(0,m);
system("PAUSE");
return 0;
}