#include /* * Number of vertices in the graph */ #define V 4 /** * Prototypes */ 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[]) { std::cout << "Following are the assigned colors\n"; for (int i = 0; i < V; i++) { std::cout << color[i]; } std::cout << "\n"; } /** * Main 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; }