{"id":2073,"date":"2020-06-12T11:42:30","date_gmt":"2020-06-12T11:42:30","guid":{"rendered":"https:\/\/blog.prepbytes.com\/?p=2073"},"modified":"2022-11-18T11:38:26","modified_gmt":"2022-11-18T11:38:26","slug":"m-coloring-problem","status":"publish","type":"post","link":"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/","title":{"rendered":"M Coloring Problem"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527520700-Article_383.png\" alt=\"\" \/><\/p>\n<p>Given an undirected graph and <code>M<\/code> colors, the problem is to find if it is possible to color the graph with at most <code>M<\/code> colors or not.<\/p>\n<p><a href=\"https:\/\/mycode.prepbytes.com\/problems\/back-tracking\/MCOLOR\" title=\"Go to mycode.prepbytes.com\" target=\"_blank\" rel=\"noopener noreferrer\"><u><strong><\/strong><\/u><\/a><\/p>\n<h2>How to Solve M Coloring Problem :<\/h2>\n<p>Idea is to assign different colors <code>(1-M)<\/code> to all the adjacent vertices. If at any point the color of any two adjacent vertices are same then we say it is not possible, otherwise it is.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/prepbytes.com\/blog\/wp-content\/uploads\/2020\/06\/mcolor.png\" alt=\"\" \/><\/p>\n<h2>How backtracking Help:<\/h2>\n<p>We will use backtracking to solve the above problem.<\/p>\n<p><strong>Backtracking<\/strong> is the approach to solve the problem by testing all possible combinations. If any subproblem does not fit the given constraint then we discard the complete subproblem (backtrack), moves a step back then try other remaining possible combinations. Backtracking algorithm is generally exponential in time.<\/p>\n<p>We will take a color array <code>color[]<\/code> to store <code>M<\/code> colours. Now iterate through <code>color[]<\/code> , then we will assign each colour to all vertices one-by-one. If any colour assignment does not match the constraints then we will backtrack and unassign the colour which has been assigned to the vertex earlier. If the vertex count reaches the total number of vertices we will return true, and if none of the assignment matches the given condition (adjacent vertices must have different colours) then we will return false.<\/p>\n<h2>Algorithm to Solve M Coloring Problem:<\/h2>\n<p><strong>colour()<\/strong>:<\/p>\n<ol>\n<li>If <code>index == number.of.vertices<\/code>, return TRUE.<\/li>\n<li>else, for every <code>k= 1<\/code>  to <code>M<\/code> :\n<ul>\n<li>assign color to the current vertex, <code>v<\/code>, (<code>color[v]=k<\/code>)<\/li>\n<li>if colour(graph,vertex+1,color)==TRUE, return true<\/li>\n<li>else ,<\/li>\n<li>mark the colour as unassigned, (<code>colour[v]=0<\/code>) (backtracking step).<\/li>\n<li>If none of the combination satisfies, return FALSE.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>Complexity Analysis :<\/h3>\n<p>In this method each vertex has <code>M<\/code> different choices of colors. So the total <strong>time complexity<\/strong> is M<sup>V<\/sup> , where <code>M<\/code> is the number of colours and <code>V<\/code> is the number of vertices.<\/p>\n<h2>Program to Solve M Coloring Problem:<\/h2>\n\t\t\t\t\t\t<style>\r\n\t\t\t\t\r\n\t\t\t\t\t#tab_container_2078 {\r\n\toverflow:hidden;\r\n\tdisplay:block;\r\n\twidth:100%;\r\n\tborder:0px solid #ddd;\r\n\tmargin-bottom:30px;\r\n\t}\r\n\r\n#tab_container_2078 .tab-content{\r\n\tpadding:20px;\r\n\tborder: 1px solid #e6e6e6 !important;\r\n\tmargin-top: 0px;\r\n\tbackground-color:#ffffff !important;\r\n\tcolor: #000000 !important;\r\n\tfont-size:16px !important;\r\n\tfont-family: Open Sans !important;\r\n\t\r\n\t\tborder: 1px solid #e6e6e6 !important;\r\n\t}\r\n#tab_container_2078 .wpsm_nav-tabs {\r\n    border-bottom: 0px solid #ddd;\r\n}\r\n#tab_container_2078 .wpsm_nav-tabs > li.active > a, #tab_container_2078 .wpsm_nav-tabs > li.active > a:hover, #tab_container_2078 .wpsm_nav-tabs > li.active > a:focus {\r\n\tcolor: #000000 !important;\r\n\tcursor: default;\r\n\tbackground-color: #ffffff !important;\r\n\tborder: 1px solid #e6e6e6 !important;\r\n}\r\n\r\n#tab_container_2078 .wpsm_nav-tabs > li > a {\r\n    margin-right: 0px !important; \r\n    line-height: 1.42857143 !important;\r\n    border: 1px solid #d5d5d5 !important;\r\n    border-radius: 0px 0px 0 0 !important; \r\n\tbackground-color: #e8e8e8 !important;\r\n\tcolor: #000000 !important;\r\n\tpadding: 15px 18px 15px 18px !important;\r\n\ttext-decoration: none !important;\r\n\tfont-size: 14px !important;\r\n\ttext-align:center !important;\r\n\tfont-family: Open Sans !important;\r\n}\r\n#tab_container_2078 .wpsm_nav-tabs > li > a:focus {\r\noutline: 0px !important;\r\n}\r\n\r\n#tab_container_2078 .wpsm_nav-tabs > li > a:before {\r\n\tdisplay:none !important;\r\n}\r\n#tab_container_2078 .wpsm_nav-tabs > li > a:after {\r\n\tdisplay:none !important ;\r\n}\r\n#tab_container_2078 .wpsm_nav-tabs > li{\r\npadding:0px !important ;\r\nmargin:0px;\r\n}\r\n\r\n#tab_container_2078 .wpsm_nav-tabs > li > a:hover , #tab_container_2078 .wpsm_nav-tabs > li > a:focus {\r\n    color: #000000 !important;\r\n    background-color: #e8e8e8 !important;\r\n\tborder: 1px solid #d5d5d5 !important;\r\n\t\r\n}\r\n#tab_container_2078 .wpsm_nav-tabs > li > a .fa{\r\n\r\nmargin-right:5px !important;\r\n\r\nmargin-left:5px !important;\r\n\r\n\r\n}\r\n\r\n\t\t#tab_container_2078 .wpsm_nav-tabs a{\r\n\t\t\tbackground-image: none;\r\n\t\t\tbackground-position: 0 0;\r\n\t\t\tbackground-repeat: repeat-x;\r\n\t\t}\r\n\t\t\t\r\n\r\n\r\n#tab_container_2078 .wpsm_nav-tabs > li {\r\n    float: left;\r\n    margin-bottom: -1px !important;\r\n\tmargin-right:0px !important; \r\n}\r\n\r\n\r\n#tab_container_2078 .tab-content{\r\noverflow:hidden !important;\r\n}\r\n\r\n\r\n@media (min-width: 769px) {\r\n\r\n\t#tab_container_2078 .wpsm_nav-tabs > li{\r\n\t\tfloat:left !important ;\r\n\t\t\t\tmargin-right:-1px !important;\r\n\t\t\t\t\t}\r\n\t#tab_container_2078 .wpsm_nav-tabs{\r\n\t\tfloat:none !important;\r\n\t\tmargin:0px !important;\r\n\t}\r\n\r\n\t#tab_container_2078 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_2078 .wpsm_nav{\r\n\t\t\t}\r\n\r\n}\r\n\r\n\r\n\r\n@media (max-width: 768px) {\r\n\t#tab_container_2078 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_2078 .wpsm_nav{\r\n\t\t\t}\r\n}\r\n\r\n\r\n\t.wpsm_nav-tabs li:before{\r\n\t\tdisplay:none !important;\r\n\t}\r\n\r\n\t@media (max-width: 768px) {\r\n\t\t\t\t\r\n\t\t\t\t.wpsm_nav-tabs{\r\n\t\t\tmargin-left:0px !important;\r\n\t\t\tmargin-right:0px !important; \r\n\t\t\t\r\n\t\t}\r\n\t\t\t\t#tab_container_2078 .wpsm_nav-tabs > li{\r\n\t\t\tfloat:none !important;\r\n\t\t}\r\n\t\t\t\r\n\t}\t\t\t\t<\/style>\r\n\t\t\t\t<div id=\"tab_container_2078\" >\r\n\t \r\n\t\t\t\t\t<ul class=\"wpsm_nav wpsm_nav-tabs\" role=\"tablist\" id=\"myTab_2078\">\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  class=\"active\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_2078_1\" aria-controls=\"tabs_desc_2078_1\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>C<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_2078_2\" aria-controls=\"tabs_desc_2078_2\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>C++<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_2078_3\" aria-controls=\"tabs_desc_2078_3\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>Java<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_2078_4\" aria-controls=\"tabs_desc_2078_4\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>Python<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\t\t\t\t <\/ul>\r\n\r\n\t\t\t\t\t  <!-- Tab panes -->\r\n\t\t\t\t\t  <div class=\"tab-content\" id=\"tab-content_2078\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane  in active \" id=\"tabs_desc_2078_1\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"c\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\n #include &lt;stdio.h&gt;\r\n    int V;\r\n \r\n \r\n    int isSafe(int v, int graph[V][V],int color[], int c) \r\n    { \r\n        for (int i = 0; i &lt; V; i++) \r\n            if ( \r\n                graph[v][i] &amp;&amp; c == color[i]) \r\n                return 0; \r\n        return 1; \r\n    } \r\n \r\n \r\n    int colour(int graph[V][V], int m,int color[], int v) \r\n    { \r\n \r\n        if (v == V) \r\n            return 1; \r\n \r\n        for (int c = 1; c &lt;= m; c++) \r\n        { \r\n            if (isSafe( \r\n                    v, graph, color, c)) { \r\n                color[v] = c; \r\n \r\n \r\n                if ( colour(graph, m, color, v + 1)== 1) \r\n                    return 1; \r\n \r\n                color[v] = 0; \r\n            } \r\n        } \r\n \r\n        return 0; \r\n    } \r\n \r\n \r\n    int graphColoring(int graph[V][V], int m) \r\n    { \r\n \r\n        int color[V]; \r\n        for (int i = 0; i &lt; V; i++) \r\n            color[i] = 0; \r\n \r\n \r\n        if ( \r\n            colour(graph, m, color, 0)== 0) { \r\n            return 0; \r\n        } \r\n \r\n        return 1; \r\n    } \r\n \r\n \r\n    int main() \r\n    { \r\n        int t;\r\n        scanf(&quot;%d&quot;,&amp;t);\r\n        while(t--)\r\n        {\r\n          int e;\r\n          scanf(&quot;%d %d&quot;,&amp;V,&amp;e);\r\n          int graph[V][V];\r\n          for(int i=0;i&lt;V;i++)\r\n          {\r\n            for(int j=0;j&lt;V;j++)\r\n             graph[i][j]=0;\r\n          }\r\n          while(e--)\r\n          {\r\n            int u,v;\r\n            scanf(&quot;%d %d&quot;,&amp;u,&amp;v);\r\n            graph[u][v]=1;\r\n            graph[v][u]=1;\r\n          }\r\n          int m; \/\/ Number of colors \r\n          scanf(&quot;%d&quot;,&amp;m);\r\n          printf(&quot;%d&#92;n&quot;,graphColoring(graph, m)); \r\n        }\r\n        return 0; \r\n    } \r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane \" id=\"tabs_desc_2078_2\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"cpp\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\n#include&lt;iostream&gt;\r\n        #define V 100\r\n \r\n        using namespace std;\r\n \r\n \r\n        int isSafe(int v, int graph[V][V],int color[], int c) \r\n        { \r\n            for (int i = 0; i &lt; V; i++) \r\n                if ( \r\n                    graph[v][i] &amp;&amp; c == color[i]) \r\n                    return 0; \r\n            return 1; \r\n        } \r\n \r\n \r\n        int colour(int graph[V][V], int m,int color[], int v) \r\n        { \r\n \r\n            if (v == V) \r\n                return 1; \r\n \r\n            for (int c = 1; c &lt;= m; c++) \r\n            { \r\n                if (isSafe( \r\n                        v, graph, color, c)) { \r\n                    color[v] = c; \r\n \r\n \r\n                    if ( colour(graph, m, color, v + 1)== 1) \r\n                        return 1; \r\n \r\n                    color[v] = 0; \r\n                } \r\n            } \r\n \r\n            return 0; \r\n        } \r\n \r\n \r\n        int graphColoring(int graph[V][V], int m) \r\n        { \r\n \r\n            int color[V]; \r\n            for (int i = 0; i &lt; V; i++) \r\n                color[i] = 0; \r\n \r\n \r\n            if ( \r\n                colour(graph, m, color, 0)== 0) { \r\n                return 0; \r\n            } \r\n \r\n            return 1; \r\n        } \r\n \r\n \r\n        int main() \r\n        { \r\n            int t;\r\n            cin&gt;&gt;t;\r\n            while(t--)\r\n            {\r\n            int n,e;\r\n            cin&gt;&gt;n&gt;&gt;e;\r\n            int graph[V][V];\r\n            for(int i=0;i&lt;V;i++)\r\n            {\r\n            for(int j=0;j&lt;V;j++)\r\n            graph[i][j]=0;\r\n            }\r\n            while(e--)\r\n            {\r\n            int u,v;\r\n            cin&gt;&gt;u&gt;&gt;v;\r\n            graph[u][v]=1;\r\n            graph[v][u]=1;\r\n            }\r\n            int m; \/\/ Number of colors \r\n            cin&gt;&gt;m;\r\n            cout&lt;&lt;graphColoring(graph, m)&lt;&lt;endl; \r\n            }\r\n        return 0; \r\n    } \r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane \" id=\"tabs_desc_2078_3\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"java\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\nimport java.util.*;\r\n    import java.io.*;\r\n\r\n    public class Main{ \r\n        final int V = 100; \r\n        int color[]; \r\n\r\n        boolean isSafe( \r\n            int v, int graph[][], int color[], \r\n            int c) \r\n        { \r\n            for (int i = 0; i &lt; V; i++) \r\n                if ( \r\n                    graph[v][i] == 1 &amp;&amp; c == color[i]) \r\n                    return false; \r\n            return true; \r\n        } \r\n\r\n        boolean graphColoringUtil(    int graph[][], int m,int color[], int v) \r\n        { \r\n\r\n            if (v == V) \r\n                return true; \r\n\r\n            for (int c = 1; c &lt;= m; c++) { \r\n\r\n                if (isSafe(v, graph, color, c)) { \r\n                    color[v] = c; \r\n\r\n                    if ( \r\n                        graphColoringUtil( \r\n                            graph, m, \r\n                            color, v + 1)) \r\n                        return true; \r\n\r\n\r\n                    color[v] = 0; \r\n                } \r\n            } \r\n\r\n\r\n            return false; \r\n        } \r\n\r\n\r\n        boolean graphColoring(int graph[][], int m) \r\n        { \r\n\r\n            color = new int[V]; \r\n            for (int i = 0; i &lt; V; i++) \r\n                color[i] = 0; \r\n\r\n            if ( \r\n                !graphColoringUtil( \r\n                    graph, m, color, 0)) { \r\n\r\n                return false; \r\n            } \r\n\r\n            return true; \r\n        } \r\n\r\n\r\n        public static void main(String args[]) \r\n        { \r\n            Main m = new Main();\r\n        Scanner sc= new Scanner(System.in);\r\n        int t = sc.nextInt();\r\n        while(t--&gt;0)\r\n        {\r\n        int n = sc.nextInt();\r\n        int e = sc.nextInt();\r\n        int [][]graph = new int [m.V][m.V];\r\n        for(int i=0;i&lt;m.V;i++)\r\n        {\r\n            for(int j = 0; j&lt;m.V;j++)\r\n            {\r\n            graph[i][j]=0;\r\n            }\r\n        }\r\n\r\n        while(e--&gt;0)\r\n        {\r\n            int u = sc.nextInt();\r\n            int v = sc.nextInt();\r\n            graph[u][v]=1;\r\n            graph[v][u]=1;\r\n        }\r\n            int no = sc.nextInt();\r\n            if(m.graphColoring(graph, no)==false)\r\n            System.out.println(&quot;0&quot;);\r\n            else\r\n            System.out.println(&quot;1&quot;);\r\n        }\r\n      } \r\n    } \r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane \" id=\"tabs_desc_2078_4\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"Python\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"Python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\nV = 100\r\ndef isSafe(v, graph, color, c):\r\n\t\r\n\tV = 100\r\n\tfor i in range(V): \r\n\t\t\r\n\t\tif (graph[v][i] and c == color[i]): \r\n\t\t\treturn 0\r\n\t\r\n\treturn 1\r\n \r\ndef colour( graph, m, color, v): \r\n\r\n\tif (v == V):\r\n\t\treturn 1 \r\n\r\n\tfor c in range(1, m + 1):\r\n\r\n\t\tif (isSafe(v, graph, color, c)): \r\n\t\t\tcolor[v] = c\r\n\r\n\t\t\tif ( colour(graph, m, color, v + 1)== 1):\r\n\t\t\t\treturn 1\r\n\r\n\t\t\tcolor[v] = 0\r\n\r\n\treturn 0\r\n\r\n\r\ndef graphColoring( graph, m): \r\n\r\n\tV = 100\r\n\tcolor = [0] * V\r\n\r\n\tfor i in range(V):\r\n\t\tcolor[i] = 0\r\n\r\n\r\n\tif (colour(graph, m, color, 0)== 0): \r\n\t\treturn 0\r\n\r\n\treturn 1\r\n\r\n\r\nfor _ in range(int(input())):\r\n\tn, e = map(int,input().split())\r\n\tgraph = [[0 for i in range(100)] for j in range(100)]\r\n\twhile e:\r\n\t\te -= 1\r\n\t\tu, v = map(int,input().split())\r\n\t\tgraph[u][v] = 1\r\n\t\tgraph[v][u] = 1\r\n\tm = int(input())\r\n\tprint(graphColoring(graph, m))\r\n\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t <\/div>\r\n\t\t\t\t\t \r\n\t\t\t\t <\/div>\r\n <script>\r\n\t\tjQuery(function () {\r\n\t\t\tjQuery('#myTab_2078 a:first').tab('show')\r\n\t\t});\r\n\t\t\r\n\t\t\t\tjQuery(function(){\r\n\t\t\tvar b=\"fadeIn\";\r\n\t\t\tvar c;\r\n\t\t\tvar a;\r\n\t\t\td(jQuery(\"#myTab_2078 a\"),jQuery(\"#tab-content_2078\"));function d(e,f,g){\r\n\t\t\t\te.click(function(i){\r\n\t\t\t\t\ti.preventDefault();\r\n\t\t\t\t\tjQuery(this).tab(\"show\");\r\n\t\t\t\t\tvar h=jQuery(this).data(\"easein\");\r\n\t\t\t\t\tif(c){c.removeClass(a);}\r\n\t\t\t\t\tif(h){f.find(\"div.active\").addClass(\"animated \"+h);a=h;}\r\n\t\t\t\t\telse{if(g){f.find(\"div.active\").addClass(\"animated \"+g);a=g;}else{f.find(\"div.active\").addClass(\"animated \"+b);a=b;}}c=f.find(\"div.active\");\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\r\n\t\tfunction do_resize(){\r\n\r\n\t\t\tvar width=jQuery( '.tab-content .tab-pane iframe' ).width();\r\n\t\t\tvar height=jQuery( '.tab-content .tab-pane iframe' ).height();\r\n\r\n\t\t\tvar toggleSize = true;\r\n\t\t\tjQuery('iframe').animate({\r\n\t\t\t    width: toggleSize ? width : 640,\r\n\t\t\t    height: toggleSize ? height : 360\r\n\t\t\t  }, 250);\r\n\r\n\t\t\t  toggleSize = !toggleSize;\r\n\t\t}\r\n\r\n\r\n\t<\/script>\r\n\t\t\t\t\r\n\t\t\t\n<p>[forminator_quiz id=&quot;2077&quot;]<\/p>\n<p>This article tried to discuss the concept of <strong>Backtracking<\/strong>. Hope this blog helps you understand and solve the problem. To practice more problems you can check out <a href=\"#\"><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Given an undirected graph and M colors, the problem is to find if it is possible to color the graph with at most M colors or not. How to Solve M Coloring Problem : Idea is to assign different colors (1-M) to all the adjacent vertices. If at any point the color of any two [&hellip;]<\/p>\n","protected":false},"author":52,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[116],"tags":[],"class_list":["post-2073","post","type-post","status-publish","format-standard","hentry","category-backtracking-interview-questions"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>M Coloring Problem: How Backtracking to Solve M-Coloring Problem<\/title>\n<meta name=\"description\" content=\"Idea Is to Assign Different Colors (1-m) to All the Adjacent Vertices. If at Any Point the Color of Any Two Adjacent Vertices Are Same Then We Say it Is Not Possible.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"M Coloring Problem: How Backtracking to Solve M-Coloring Problem\" \/>\n<meta property=\"og:description\" content=\"Idea Is to Assign Different Colors (1-m) to All the Adjacent Vertices. If at Any Point the Color of Any Two Adjacent Vertices Are Same Then We Say it Is Not Possible.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/\" \/>\n<meta property=\"og:site_name\" content=\"PrepBytes Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prepbytes0211\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-12T11:42:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-18T11:38:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527520700-Article_383.png\" \/>\n<meta name=\"author\" content=\"Prepbytes\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Prepbytes\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/\"},\"author\":{\"name\":\"Prepbytes\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e\"},\"headline\":\"M Coloring Problem\",\"datePublished\":\"2020-06-12T11:42:30+00:00\",\"dateModified\":\"2022-11-18T11:38:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/\"},\"wordCount\":324,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/43.205.93.38\/#organization\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527520700-Article_383.png\",\"articleSection\":[\"Backtracking Interview Questions\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/\",\"url\":\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/\",\"name\":\"M Coloring Problem: How Backtracking to Solve M-Coloring Problem\",\"isPartOf\":{\"@id\":\"http:\/\/43.205.93.38\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527520700-Article_383.png\",\"datePublished\":\"2020-06-12T11:42:30+00:00\",\"dateModified\":\"2022-11-18T11:38:26+00:00\",\"description\":\"Idea Is to Assign Different Colors (1-m) to All the Adjacent Vertices. If at Any Point the Color of Any Two Adjacent Vertices Are Same Then We Say it Is Not Possible.\",\"breadcrumb\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#primaryimage\",\"url\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527520700-Article_383.png\",\"contentUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527520700-Article_383.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/43.205.93.38\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backtracking Interview Questions\",\"item\":\"https:\/\/prepbytes.com\/blog\/category\/backtracking-interview-questions\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"M Coloring Problem\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/43.205.93.38\/#website\",\"url\":\"http:\/\/43.205.93.38\/\",\"name\":\"PrepBytes Blog\",\"description\":\"ONE-STOP RESOURCE FOR EVERYTHING RELATED TO CODING\",\"publisher\":{\"@id\":\"http:\/\/43.205.93.38\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/43.205.93.38\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"http:\/\/43.205.93.38\/#organization\",\"name\":\"Prepbytes\",\"url\":\"http:\/\/43.205.93.38\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp\",\"contentUrl\":\"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp\",\"width\":160,\"height\":160,\"caption\":\"Prepbytes\"},\"image\":{\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/prepbytes0211\/\",\"https:\/\/www.instagram.com\/prepbytes\/\",\"https:\/\/www.linkedin.com\/company\/prepbytes\/\",\"https:\/\/www.youtube.com\/channel\/UC0xGnHDrjUM1pDEK2Ka5imA\"]},{\"@type\":\"Person\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e\",\"name\":\"Prepbytes\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g\",\"caption\":\"Prepbytes\"},\"url\":\"https:\/\/prepbytes.com\/blog\/author\/gourav-jaincollegedekho-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"M Coloring Problem: How Backtracking to Solve M-Coloring Problem","description":"Idea Is to Assign Different Colors (1-m) to All the Adjacent Vertices. If at Any Point the Color of Any Two Adjacent Vertices Are Same Then We Say it Is Not Possible.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/","og_locale":"en_US","og_type":"article","og_title":"M Coloring Problem: How Backtracking to Solve M-Coloring Problem","og_description":"Idea Is to Assign Different Colors (1-m) to All the Adjacent Vertices. If at Any Point the Color of Any Two Adjacent Vertices Are Same Then We Say it Is Not Possible.","og_url":"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/","og_site_name":"PrepBytes Blog","article_publisher":"https:\/\/www.facebook.com\/prepbytes0211\/","article_published_time":"2020-06-12T11:42:30+00:00","article_modified_time":"2022-11-18T11:38:26+00:00","og_image":[{"url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527520700-Article_383.png","type":"","width":"","height":""}],"author":"Prepbytes","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Prepbytes","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#article","isPartOf":{"@id":"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/"},"author":{"name":"Prepbytes","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e"},"headline":"M Coloring Problem","datePublished":"2020-06-12T11:42:30+00:00","dateModified":"2022-11-18T11:38:26+00:00","mainEntityOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/"},"wordCount":324,"commentCount":0,"publisher":{"@id":"http:\/\/43.205.93.38\/#organization"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527520700-Article_383.png","articleSection":["Backtracking Interview Questions"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/","url":"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/","name":"M Coloring Problem: How Backtracking to Solve M-Coloring Problem","isPartOf":{"@id":"http:\/\/43.205.93.38\/#website"},"primaryImageOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#primaryimage"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527520700-Article_383.png","datePublished":"2020-06-12T11:42:30+00:00","dateModified":"2022-11-18T11:38:26+00:00","description":"Idea Is to Assign Different Colors (1-m) to All the Adjacent Vertices. If at Any Point the Color of Any Two Adjacent Vertices Are Same Then We Say it Is Not Possible.","breadcrumb":{"@id":"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/prepbytes.com\/blog\/m-coloring-problem\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#primaryimage","url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527520700-Article_383.png","contentUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645527520700-Article_383.png"},{"@type":"BreadcrumbList","@id":"https:\/\/prepbytes.com\/blog\/m-coloring-problem\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/43.205.93.38\/"},{"@type":"ListItem","position":2,"name":"Backtracking Interview Questions","item":"https:\/\/prepbytes.com\/blog\/category\/backtracking-interview-questions\/"},{"@type":"ListItem","position":3,"name":"M Coloring Problem"}]},{"@type":"WebSite","@id":"http:\/\/43.205.93.38\/#website","url":"http:\/\/43.205.93.38\/","name":"PrepBytes Blog","description":"ONE-STOP RESOURCE FOR EVERYTHING RELATED TO CODING","publisher":{"@id":"http:\/\/43.205.93.38\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/43.205.93.38\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"http:\/\/43.205.93.38\/#organization","name":"Prepbytes","url":"http:\/\/43.205.93.38\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/","url":"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp","contentUrl":"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp","width":160,"height":160,"caption":"Prepbytes"},"image":{"@id":"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/prepbytes0211\/","https:\/\/www.instagram.com\/prepbytes\/","https:\/\/www.linkedin.com\/company\/prepbytes\/","https:\/\/www.youtube.com\/channel\/UC0xGnHDrjUM1pDEK2Ka5imA"]},{"@type":"Person","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e","name":"Prepbytes","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g","caption":"Prepbytes"},"url":"https:\/\/prepbytes.com\/blog\/author\/gourav-jaincollegedekho-com\/"}]}},"_links":{"self":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/2073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/comments?post=2073"}],"version-history":[{"count":10,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/2073\/revisions"}],"predecessor-version":[{"id":10623,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/2073\/revisions\/10623"}],"wp:attachment":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/media?parent=2073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/categories?post=2073"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/tags?post=2073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}