This is a java program to check whether graph contains Eulerian Cycle. The criteran Euler suggested,
1. If graph has no odd degree vertex, there is at least one Eulerian Circuit.
2. If graph as two vertices with odd degree, there is no Eulerian Circuit but at least one Eulerian Path.
3. If graph has more than two vertices with odd degree, there is no Eulerian Circuit or Eulerian Path.
Here is the source code of the Java Program to Check Whether an Undirected Graph Contains a Eulerian Path. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
package com.maixuanviet.graph;
import java.util.InputMismatchException;
import java.util.Scanner;
public class UndirectedEulerPath
{
private int[][] adjacencyMatrix;
private int numberOfNodes;
public UndirectedEulerPath(int numberOfNodes, int[][] adjacencyMatrix)
{
this.numberOfNodes = numberOfNodes;
this.adjacencyMatrix = new int[numberOfNodes + 1][numberOfNodes + 1];
for (int sourceVertex = 1; sourceVertex <= numberOfNodes; sourceVertex++)
{
for (int destinationVertex = 1; destinationVertex <= numberOfNodes; destinationVertex++)
{
this.adjacencyMatrix[sourceVertex][destinationVertex] = adjacencyMatrix[sourceVertex][destinationVertex];
}
}
}
public int degree(int vertex)
{
int degree = 0;
for (int destinationvertex = 1; destinationvertex <= numberOfNodes; destinationvertex++)
{
if (adjacencyMatrix[vertex][destinationvertex] == 1
|| adjacencyMatrix[destinationvertex][vertex] == 1)
{
degree++;
}
}
return degree;
}
public int countOddDegreeVertex()
{
int count = 0;
for (int node = 1; node <= numberOfNodes; node++)
{
if ((degree(node) % 2) != 0)
{
count++;
}
}
return count;
}
public static void main(String... arg)
{
int number_of_nodes;
Scanner scanner = null;
try
{
System.out.println("Enter the number of nodes in the graph");
scanner = new Scanner(System.in);
number_of_nodes = scanner.nextInt();
int adjacency_matrix[][] = new int[number_of_nodes + 1][number_of_nodes + 1];
System.out.println("Enter the adjacency matrix");
for (int i = 1; i <= number_of_nodes; i++)
{
for (int j = 1; j <= number_of_nodes; j++)
{
adjacency_matrix[i][j] = scanner.nextInt();
}
}
// make the graph undirected
for (int i = 1; i <= number_of_nodes; i++)
{
for (int j = 1; j <= number_of_nodes; j++)
{
if (adjacency_matrix[i][j] == 1
&& adjacency_matrix[j][i] == 0)
{
adjacency_matrix[j][i] = 1;
}
}
}
DirectedEulerianCircuit path = new DirectedEulerianCircuit(number_of_nodes,
adjacency_matrix);
int count = path.countOddDegreeVertex();
if (count == 0)
{
System.out
.println("As the graph has no odd degree vertex, there is at least one Eulerian Circuit.");
}
else if (count == 2)
{
System.out
.println("As the graph as two vertices with odd degree, there is no Eulerian Circuit but at least one Eulerian Path.");
}
else
{
System.out
.println("As the graph has more than two vertices with odd degree, there is no Eulerian Circuit or Eulerian Path.");
}
}
catch (InputMismatchException inputMismatch)
{
System.out.println("Wrong Input format");
}
scanner.close();
}
}
Output:
$ javac UndirectedEulerPath.java $ java UndirectedEulerPath Enter the number of nodes in the graph 4 Enter the adjacency matrix 0 1 1 1 1 0 1 0 1 1 0 1 1 0 1 0 As the graph as two vertices with odd degree, there is no Eulerian Circuit but at least one Eulerian Path.
Related posts:
Spring Boot - Application Properties
Guide to Spring 5 WebFlux
Queue và PriorityQueue trong Java
Introduction to Spring Boot CLI
Hướng dẫn Java Design Pattern – Composite
ETL with Spring Cloud Data Flow
Jackson Unmarshalling JSON with Unknown Properties
Using the Map.Entry Java Class
Autoboxing và Unboxing trong Java
Java – Reader to String
Apache Commons Collections MapUtils
Java Program to Create a Balanced Binary Tree of the Incoming Data
Java Program to Solve Tower of Hanoi Problem using Stacks
Introduction to Thread Pools in Java
Java Program to Search Number Using Divide and Conquer with the Aid of Fibonacci Numbers
The “final” Keyword in Java
Disable DNS caching
Kết hợp Java Reflection và Java Annotations
Java Program to Represent Graph Using 2D Arrays
Giới thiệu Google Guice – Injection, Scope
An Example of Load Balancing with Zuul and Eureka
How to Find an Element in a List with Java
HashSet trong Java hoạt động như thế nào?
Java – Write to File
Java Program to Find the Number of Ways to Write a Number as the Sum of Numbers Smaller than Itself
HttpAsyncClient Tutorial
Java Program to Implement Merge Sort on n Numbers Without tail-recursion
RestTemplate Post Request with JSON
Consuming RESTful Web Services
Spring Security Registration – Resend Verification Email
Easy Ways to Write a Java InputStream to an OutputStream
Logout in an OAuth Secured Application