Code:
#include <iostream>
#include <conio.h>
const int R = 8;
const int C = 4;
int safe(int a, int G[R][C], int color[], int c);
int checking(int G[R][C], int m, int color[], int a);
void graphcoloring(int G[R][C], int m);
void coloring(int color[]);
using namespace std;
int main()
{
int G[R][C] = {
{ 2, 8, 0, 0 },
{ 1, 3, 4, 8 },
{ 2, 4, 0, 0 },
{ 2, 3, 5, 6 },
{ 4, 6, 0, 0 },
{ 4, 5, 7, 0 },
{ 6, 8, 0, 0 },
{ 1, 2, 7, 0 } };
int m = 3; //colors
graphcoloring(G, m);
_getch();
}
int safe(int a, int G[R][C], int color[], int c)
{
for (int i = 0; i < R; i++)
{
if (G[R][i] && c == color[i])
return 0;
else
return 1;
}
}
int checking(int G[R][C], int m, int color[], int a)
{
int c;
if (a == R)
return 1;
for (c = 1; c <= m; c++)
{
if (safe(a, G, color, c))
{
color[a] = c;
if (checking(G, m, color, a + 1) == 1)
return 1;
else
color[a] = 0;
}
}
}
void graphcoloring(int G[R][C], int m)
{
int color[R];
for (int i = 0; i < R; i++)
color[i] = 0;
if (checking(G, m, color, 0) == 0)
{
cout << "Can't color";
return;
}
coloring(color);
}
void coloring(int color[])
{
cout << "The colors are: " << endl;
for (int i = 0; i < R; i++)
cout << color[i] << endl;
}