1+ /*
2+ Problem: M Coloring Problem
3+ Given a graph represented as an adjacency matrix and a number M (number of colors),
4+ determine if the graph can be colored with up to M colors such that no two adjacent
5+ vertices share the same color.
6+
7+ What is the M Coloring Problem?
8+ - This problem is about coloring a graph's vertices with at most M different colors
9+ such that no two adjacent vertices have the same color.
10+
11+ Example:
12+ - Consider a triangle (3 nodes connected cyclically). We'd need 3 colors to color each vertex
13+ without adjacent vertices having the same color.
14+
15+ Solution:
16+ - We will be using backtracking to solve this question.
17+ - Color a vertex, then move to an adjacent vertex and try all colors. If a color is valid,
18+ continue to the next vertex, else backtrack.
19+ */
20+
21+ class MColoring {
22+ constructor ( graph , m ) {
23+ this . graph = graph ; // adjacency matrix representation
24+ this . m = m ;
25+ this . colors = new Array ( graph . length ) . fill ( 0 ) ;
26+ }
27+
28+ isSafe ( vertex , color ) {
29+ for ( let i = 0 ; i < this . graph . length ; i ++ ) {
30+ if ( this . graph [ vertex ] [ i ] && this . colors [ i ] === color ) {
31+ return false ;
32+ }
33+ }
34+ return true ;
35+ }
36+
37+ solveColoring ( vertex = 0 ) {
38+ if ( vertex === this . graph . length ) {
39+ return true ;
40+ }
41+
42+ for ( let color = 1 ; color <= this . m ; color ++ ) {
43+ if ( this . isSafe ( vertex , color ) ) {
44+ this . colors [ vertex ] = color ;
45+
46+ if ( this . solveColoring ( vertex + 1 ) ) {
47+ return true ;
48+ }
49+
50+ this . colors [ vertex ] = 0 ; // backtrack
51+ }
52+ }
53+ return false ;
54+ }
55+
56+ getSolution ( ) {
57+ if ( this . solveColoring ( ) ) {
58+ return this . colors ;
59+ }
60+ return [ ] ;
61+ }
62+ }
63+
64+ export { MColoring }
65+
0 commit comments