Java Program to Implement Graph Coloring Algorithm

This is a Java Program to Implement Graph Coloring Algorithm. Graph Coloring is a way of coloring the vertices of a undirected graph such that no two adjacent vertices share the same color.

Here is the source code of the Java Program to Implement Graph Coloring Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

/**
 **  Java Program to Implement Graph Coloring Algorithm
 **/
 
import java.util.Scanner;
 
/** Class GraphColoring **/
public class GraphColoring
{    
    private int V, numOfColors;
    private int[] color; 
    private int[][] graph;
 
    /** Function to assign color **/
    public void graphColor(int[][] g, int noc)
    {
        V = g.length;
        numOfColors = noc;
        color = new int[V];
        graph = g;
 
        try
        {
            solve(0);
            System.out.println("No solution");
        }
        catch (Exception e)
        {
            System.out.println("\nSolution exists ");
            display();
        }
    }
    /** function to assign colors recursively **/
    public void solve(int v) throws Exception
    {
        /** base case - solution found **/
        if (v == V)
            throw new Exception("Solution found");
        /** try all colours **/
        for (int c = 1; c <= numOfColors; c++)
        {
            if (isPossible(v, c))
            {
                /** assign and proceed with next vertex **/
                color[v] = c;
                solve(v + 1);
                /** wrong assignement **/
                color[v] = 0;
            }
        }    
    }
    /** function to check if it is valid to allot that color to vertex **/
    public boolean isPossible(int v, int c)
    {
        for (int i = 0; i < V; i++)
            if (graph[v][i] == 1 && c == color[i])
                return false;
        return true;
    }
    /** display solution **/
    public void display()
    {
        System.out.print("\nColors : ");
        for (int i = 0; i < V; i++)
            System.out.print(color[i] +" ");
        System.out.println();
    }    
    /** Main function **/
    public static void main (String[] args) 
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Graph Coloring Algorithm Test\n");
        /** Make an object of GraphColoring class **/
        GraphColoring gc = new GraphColoring();
 
        /** Accept number of vertices **/
        System.out.println("Enter number of verticesz\n");
        int V = scan.nextInt();
 
        /** get graph **/
        System.out.println("\nEnter matrix\n");
        int[][] graph = new int[V][V];
        for (int i = 0; i < V; i++)
            for (int j = 0; j < V; j++)
                graph[i][j] = scan.nextInt();
 
        System.out.println("\nEnter number of colors");
        int c = scan.nextInt();
 
        gc.graphColor(graph, c);
 
    }
}
Graph Coloring Algorithm Test
 
Enter number of vertices
 
10
 
Enter matrix
 
0 1 0 0 0 1 0 0 0 0
1 0 1 0 0 0 1 0 0 0
0 1 0 1 0 0 0 1 0 0
0 0 1 0 1 0 0 0 1 0
1 0 0 1 0 0 0 0 0 1
1 0 0 0 0 0 0 1 1 0
0 1 0 0 0 0 0 0 1 1
0 0 1 0 0 1 0 0 0 1
0 0 0 1 0 1 1 0 0 0
0 0 0 0 1 0 1 1 0 0
 
Enter number of colors
3
 
Solution exists
 
Colors : 1 2 1 2 3 2 1 3 3 2

Related posts:

Bootstrap a Web Application with Spring 5
Unsatisfied Dependency in Spring
@DynamicUpdate with Spring Data JPA
Java – Delete a File
Mapping a Dynamic JSON Object with Jackson
Hướng dẫn Java Design Pattern – Facade
Introduction to Spring Boot CLI
Java Program to Implement Direct Addressing Tables
How to Return 404 with Spring WebFlux
Introduction to Spring Cloud CLI
Java Program to Implement Sparse Matrix
Java Program to Implement LinkedBlockingQueue API
Java Program to find the number of occurrences of a given number using Binary Search approach
Java Program to Describe the Representation of Graph using Adjacency List
Java Program to Implement the Vigenere Cypher
Introduction to Spring Cloud Stream
Java Program to Find the Shortest Path Between Two Vertices Using Dijkstra’s Algorithm
Java Program to Generate a Random UnDirected Graph for a Given Number of Edges
Java Program to Solve Set Cover Problem assuming at max 2 Elements in a Subset
Getting Started with Forms in Spring MVC
Recommended Package Structure of a Spring Boot Project
Introduction to Spring Data REST
Spring RestTemplate Request/Response Logging
Java Program to Check Whether it is Weakly Connected or Strongly Connected for a Directed Graph
File Upload with Spring MVC
Guide to the Volatile Keyword in Java
Java – Reader to Byte Array
How to Use if/else Logic in Java 8 Streams
Hướng dẫn Java Design Pattern – Adapter
Java Program to Implement Extended Euclid Algorithm
Generating Random Numbers in a Range in Java
Spring Cloud AWS – S3