Java Program to Check if a Given Graph Contain Hamiltonian Cycle or Not

This is a java program to check if the graph contains any Hamiltonian cycle. In the mathematical field of graph theory, a Hamiltonian path (or traceable path) is a path in an undirected or directed graph that visits each vertex exactly once. A Hamiltonian cycle (or Hamiltonian circuit) is a Hamiltonian path that is a cycle. Determining whether such paths and cycles exist in graphs is the Hamiltonian path problem, which is NP-complete.

Here is the source code of the Java Program to Check if a Given Graph Contain Hamiltonian Cycle or Not. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

package com.maixuanviet.hardgraph;
 
import java.util.Arrays;
import java.util.Scanner;
 
public class CheckHamiltonianCycle
{
    private int     V, pathCount;
    private int[]   path;
    private int[][] graph;
 
    /** Function to find cycle **/
    public void findHamiltonianCycle(int[][] g)
    {
        V = g.length;
        path = new int[V];
        Arrays.fill(path, -1);
        graph = g;
        try
        {
            path[0] = 0;
            pathCount = 1;
            solve(0);
            System.out.println("No solution");
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
            display();
        }
    }
 
    /** function to find paths recursively **/
    public void solve(int vertex) throws Exception
    {
        /** solution **/
        if (graph[vertex][0] == 1 && pathCount == V)
            throw new Exception("Solution found");
        /** all vertices selected but last vertex not linked to 0 **/
        if (pathCount == V)
            return;
        for (int v = 0; v < V; v++)
        {
            /** if connected **/
            if (graph[vertex][v] == 1)
            {
                /** add to path **/
                path[pathCount++] = v;
                /** remove connection **/
                graph[vertex][v] = 0;
                graph[v][vertex] = 0;
                /** if vertex not already selected solve recursively **/
                if (!isPresent(v))
                    solve(v);
                /** restore connection **/
                graph[vertex][v] = 1;
                graph[v][vertex] = 1;
                /** remove path **/
                path[--pathCount] = -1;
            }
        }
    }
 
    /** function to check if path is already selected **/
    public boolean isPresent(int v)
    {
        for (int i = 0; i < pathCount - 1; i++)
            if (path[i] == v)
                return true;
        return false;
    }
 
    /** display solution **/
    public void display()
    {
        System.out.print("\nPath : ");
        for (int i = 0; i <= V; i++)
            System.out.print(path[i % V] + " ");
        System.out.println();
    }
 
    /** Main function **/
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        /** Make an object of HamiltonianCycle class **/
        CheckHamiltonianCycle hc = new CheckHamiltonianCycle();
        /** Accept number of vertices **/
        System.out.println("Enter number of vertices");
        int V = scan.nextInt();
        /** get graph **/
        System.out.println("Enter adjacency matrix");
        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();
        hc.findHamiltonianCycle(graph);
        scan.close();
    }
}

Output:

$ javac CheckHamiltonianCycle.java
$ java CheckHamiltonianCycle
 
Enter number of vertices
6
Enter adjacency matrix
0 1 0 0 0 0
1 0 1 1 0 0
0 1 0 0 0 1 
0 1 0 0 1 1
0 0 0 1 0 1
0 0 1 1 1 0
No solution

Related posts:

Java Program to Implement Fisher-Yates Algorithm for Array Shuffling
Guava – Join and Split Collections
Simplify the DAO with Spring and Java Generics
Java Program to Implement the MD5 Algorithm
Java Program to Check the Connectivity of Graph Using BFS
Setting the Java Version in Maven
Java Program to Generate All Pairs of Subsets Whose Union Make the Set
REST Web service: Basic Authentication trong Jersey 2.x
Java Program to Find MST (Minimum Spanning Tree) using Kruskal’s Algorithm
Xử lý ngoại lệ đối với trường hợp ghi đè phương thức trong java
Tính đóng gói (Encapsulation) trong java
Introduction to Java 8 Streams
Phương thức forEach() trong java 8
Adding a Newline Character to a String in Java
Giới thiệu Java Service Provider Interface (SPI) – Tạo các ứng dụng Java dễ mở rộng
Java Program to Use Dynamic Programming to Solve Approximate String Matching
Set Interface trong Java
Quick Guide to Spring Bean Scopes
A Guide to Apache Commons Collections CollectionUtils
Removing all duplicates from a List in Java
Spring Boot - Code Structure
Spring REST with a Zuul Proxy
Hướng dẫn Java Design Pattern – Flyweight
Lớp TreeMap trong Java
Hướng dẫn Java Design Pattern – Abstract Factory
Write/Read cookies using HTTP and Read a file from the internet
Convert Hex to ASCII in Java
Java Program to Perform Searching in a 2-Dimension K-D Tree
Inject Parameters into JUnit Jupiter Unit Tests
HttpClient with SSL
Java Program to Perform Complex Number Multiplication
Java Program to Perform Right Rotation on a Binary Search Tree