Start Typing !!! type the highlighted character. You can't scroll once you start typing.
filename

graph_coloring.cpp

#include <stdio.h>

// Number of vertices in the graph

#define V 4

void printSolution(int color[]);

/* A utility function to check if the current color assignment

is safe for vertex v */

bool isSafe(int v, bool graph[V][V], int color[], int c)

{

for (int i = 0; i < V; i++)

if (graph[v][i] && c == color[i])

return false;

return true;

}

/* A recursive utility function to solve m coloring problem */

void graphColoring(bool graph[V][V], int m, int color[], int v)

{

/* base case: If all vertices are assigned a color then

return true */

if (v == V)

{

printSolution(color);

return;

}

/* Consider this vertex v and try different colors */

for (int c = 1; c <= m; c++)

{

/* Check if assignment of color c to v is fine*/

if (isSafe(v, graph, color, c))

{

color[v] = c;

/* recur to assign colors to rest of the vertices */

graphColoring(graph, m, color, v + 1);

/* If assigning color c doesn't lead to a solution

then remove it */

color[v] = 0;

}

}

}

/* A utility function to print solution */

void printSolution(int color[])

{

printf(" Following are the assigned colors \n");

for (int i = 0; i < V; i++)

printf(" %d ", color[i]);

printf("\n");

}

// driver program to test above function

int main()

{

/* Create following graph and test whether it is 3 colorable

(3)---(2)

| / |

| / |

| / |

(0)---(1)

*/

bool graph[V][V] = {

{0, 1, 1, 1},

{1, 0, 1, 0},

{1, 1, 0, 1},

{1, 0, 1, 0},

};

int m = 3; // Number of colors

int color[V];

for (int i = 0; i < V; i++)

color[i] = 0;

graphColoring(graph, m, color, 0);

return 0;

}