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:
Introduction to Spring Data JDBC
Registration with Spring Security – Password Encoding
Java Program to Implement Find all Cross Edges in a Graph
Java Program to Implement Weight Balanced Tree
Using JWT with Spring Security OAuth (legacy stack)
Compact Strings in Java 9
Java Program to Implement HashTable API
Creating a Custom Starter with Spring Boot
Marker Interface trong Java
Java Program to Check whether Graph is a Bipartite using DFS
Immutable Map Implementations in Java
Spring Boot - Code Structure
Hướng dẫn Java Design Pattern – Strategy
A Quick Guide to Using Keycloak with Spring Boot
Java Program to Decode a Message Encoded Using Playfair Cipher
Spring – Injecting Collections
Java Program to Perform Preorder Non-Recursive Traversal of a Given Binary Tree
Java Program to Find Whether a Path Exists Between 2 Given Nodes
Java Program to Implement Hash Tables with Linear Probing
Java Program to implement Priority Queue
Spring MVC Setup with Kotlin
Java Program to Solve any Linear Equation in One Variable
Java Program to Search Number Using Divide and Conquer with the Aid of Fibonacci Numbers
Java InputStream to String
Sort a HashMap in Java
Guide to Guava Table
Exploring the Spring Boot TestRestTemplate
Java Program to Implement Levenshtein Distance Computing Algorithm
REST Web service: Tạo ứng dụng Java RESTful Client với Jersey Client 2.x
Create a Custom Exception in Java
Java Program to Represent Graph Using 2D Arrays
Hướng dẫn Java Design Pattern – Memento