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 Directed 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 DirectedEulerPath
{
private int[][] adjacencyMatrix;
private int numberOfNodes;
public DirectedEulerPath(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();
}
}
DirectedEulerPath path = new DirectedEulerPath(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 DirectedEulerPath.java $ java DirectedEulerPath 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:
Java Program to Implement Branch and Bound Method to Perform a Combinatorial Search
Java Program to Implement Ternary Tree
Java Program to Check whether Directed Graph is Connected using DFS
Guide to java.util.concurrent.BlockingQueue
Apache Camel with Spring Boot
Using Java Assertions
Java Convenience Factory Methods for Collections
Java Program to Implement IdentityHashMap API
Apache Tiles Integration with Spring MVC
Java Program to Generate All Pairs of Subsets Whose Union Make the Set
Java Program to Implement Word Wrap Problem
Java Program to Check Whether an Undirected Graph Contains a Eulerian Cycle
Queue và PriorityQueue trong Java
The Modulo Operator in Java
Java 8 – Powerful Comparison with Lambdas
Giới thiệu Java 8
Comparing Objects in Java
Spring Data MongoDB – Indexes, Annotations and Converters
A Guide to Queries in Spring Data MongoDB
Creating a Custom Starter with Spring Boot
Java Program to Implement Adjacency List
Java Program to Implement Randomized Binary Search Tree
How To Serialize and Deserialize Enums with Jackson
Java Program to Implement the Hill Cypher
Cachable Static Assets with Spring MVC
Java Program to Create a Random Linear Extension for a DAG
Java Program to Check Whether a Weak Link i.e. Articulation Vertex Exists in a Graph
HashSet trong java
More Jackson Annotations
A Guide to Java HashMap
New Features in Java 12
Derived Query Methods in Spring Data JPA Repositories