Java Program to Find Hamiltonian Cycle in an UnWeighted Graph

This is a java program to find hamilton cycle in graph. 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 Find Hamiltonian Cycle in an UnWeighted Graph. 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 HamiltonianCycle
{
    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 **/
        HamiltonianCycle hc = new HamiltonianCycle();
        /** 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 HamiltonianCycle.java
$ java HamiltonianCycle	
 
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 Coppersmith Freivald’s Algorithm
Service Registration with Eureka
Java Program to Implement Gift Wrapping Algorithm in Two Dimensions
A Guide to JUnit 5
Retrieve User Information in Spring Security
Java Program to Perform Partition of an Integer in All Possible Ways
A Guide to @RepeatedTest in Junit 5
CyclicBarrier in Java
Java Program to Implement the Alexander Bogomolny’s UnOrdered Permutation Algorithm for Elements Fro...
Java Program to Check Multiplicability of Two Matrices
Converting Iterator to List
Logging a Reactive Sequence
Spring Data MongoDB – Indexes, Annotations and Converters
Ép kiểu trong Java (Type casting)
Introduction to Apache Commons Text
Netflix Archaius with Various Database Configurations
Java Program to Implement Max-Flow Min-Cut Theorem
Auditing with JPA, Hibernate, and Spring Data JPA
Hướng dẫn sử dụng Java String, StringBuffer và StringBuilder
Use Liquibase to Safely Evolve Your Database Schema
Java Program to Implement the Program Used in grep/egrep/fgrep
Spring REST API + OAuth2 + Angular (using the Spring Security OAuth legacy stack)
Java Program to Generate Random Numbers Using Multiply with Carry Method
Filtering and Transforming Collections in Guava
Introduction to the Java NIO2 File API
Thao tác với tập tin và thư mục trong Java
Create a Custom Auto-Configuration with Spring Boot
Creating Docker Images with Spring Boot
Transaction Propagation and Isolation in Spring @Transactional
Functional Interface trong Java 8
Java Program to Generate a Graph for a Given Fixed Degree Sequence
A Guide to HashSet in Java