This is a Java Program to Implement Hamiltonian Cycle Algorithm. Hamiltonian cycle is a path in a graph that visits each vertex exactly once and back to starting vertex. This program is to determine if a given graph is a hamiltonian cycle or not. This program assumes every vertex of the graph to be a part of hamiltonian path.
Here is the source code of the Java Program to Implement Hamiltonian Cycle Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/**
** Java Program to Implement Hamiltonian Cycle Algorithm
**/
import java.util.Scanner;
import java.util.Arrays;
/** Class HamiltonianCycle **/
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);
System.out.println("HamiltonianCycle Algorithm Test\n");
/** Make an object of HamiltonianCycle class **/
HamiltonianCycle hc = new HamiltonianCycle();
/** Accept number of vertices **/
System.out.println("Enter number of vertices\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();
hc.findHamiltonianCycle(graph);
}
}
HamiltonianCycle Algorithm Test Enter number of vertices 8 Enter matrix 0 1 0 1 1 0 0 0 1 0 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1 0 0 0 0 1 1 0 0 0 0 1 0 1 0 1 0 0 1 0 1 0 0 0 1 0 0 1 0 1 0 0 0 1 1 0 1 0 Solution found Path : 0 1 2 3 7 6 5 4 0
Related posts:
Java Program to Implement Sparse Matrix
Java Program to Implement Naor-Reingold Pseudo Random Function
Spring REST API + OAuth2 + Angular
So sánh Array và ArrayList trong Java
Mapping a Dynamic JSON Object with Jackson
A Guide to Apache Commons Collections CollectionUtils
Java Program to Implement HashTable API
Autoboxing và Unboxing trong Java
Introduction to Spring MVC HandlerInterceptor
Spring REST API + OAuth2 + Angular (using the Spring Security OAuth legacy stack)
The DAO with JPA and Spring
Spring Boot Application as a Service
Java Program to find the number of occurrences of a given number using Binary Search approach
Redirect to Different Pages after Login with Spring Security
Sending Emails with Java
How to Remove the Last Character of a String?
Mix plain text and HTML content in a mail
Tạo ứng dụng Java RESTful Client không sử dụng 3rd party libraries
Java Program to Implement the Program Used in grep/egrep/fgrep
Java Program to Implement Efficient O(log n) Fibonacci generator
Java Program to Check whether Undirected Graph is Connected using DFS
Collect a Java Stream to an Immutable Collection
Java Program to Perform Polygon Containment Test
Java Program to Implement Shunting Yard Algorithm
Bootstrapping Hibernate 5 with Spring
Function trong Java 8
Java InputStream to String
Spring WebClient Requests with Parameters
Java Program to Perform the Shaker Sort
Java Program to Implement Double Order Traversal of a Binary Tree
Java Program to Implement LinkedBlockingDeque API
Java – Reader to InputStream