From 1276e237b1ff1222cc09c82f76109c2cab54c9e8 Mon Sep 17 00:00:00 2001 From: AnupKumarPanwar <1anuppanwar@gmail.com> Date: Sun, 23 Apr 2017 16:32:34 +0530 Subject: [PATCH] Graph Coloring --- Backtracking/Graph Coloring.cpp | 81 +++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 Backtracking/Graph Coloring.cpp diff --git a/Backtracking/Graph Coloring.cpp b/Backtracking/Graph Coloring.cpp new file mode 100644 index 000000000..fdf50b288 --- /dev/null +++ b/Backtracking/Graph Coloring.cpp @@ -0,0 +1,81 @@ +#include + +// 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; +}