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 Cycle. 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 UndirectedEulerianCircuit
{
private int[][] adjacencyMatrix;
private int numberOfNodes;
public UndirectedEulerianCircuit(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;
}
}
}
UndirectedEulerPath path = new UndirectedEulerPath(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 UndirectedEulerianCircuit.java $ java UndirectedEulerianCircuit Enter the number of nodes in the graph 6 Enter the 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 As the graph has more than two vertices with odd degree, there is no Eulerian Circuit or Eulerian Path.
Related posts:
Period and Duration in Java
Spring Cloud Series – The Gateway Pattern
Java Program to Check Cycle in a Graph using Topological Sort
How to Read a Large File Efficiently with Java
Cachable Static Assets with Spring MVC
Java Program to Implement CopyOnWriteArraySet API
Phương thức tham chiếu trong Java 8 – Method References
How to Read a File in Java
Spring Boot - Rest Template
Spring Boot - Admin Client
Java Program to Perform Preorder Recursive Traversal of a Given Binary Tree
Spring Security Basic Authentication
Java Program to Implement Borwein Algorithm
Java Program to Implement Warshall Algorithm
Java Perform to a 2D FFT Inplace Given a Complex 2D Array
Spring Boot - Servlet Filter
Queue và PriorityQueue trong Java
Java Program to Convert a Decimal Number to Binary Number using Stacks
Convert String to Byte Array and Reverse in Java
RegEx for matching Date Pattern in Java
Spring Boot - Runners
4 tính chất của lập trình hướng đối tượng trong Java
A Custom Media Type for a Spring REST API
Java Program to Implement Quick Sort with Given Complexity Constraint
Java Program to Check Whether a Directed Graph Contains a Eulerian Path
Java Program to Compute the Volume of a Tetrahedron Using Determinants
Java Program to Implement Selection Sort
Using the Map.Entry Java Class
Constructor Dependency Injection in Spring
Spring MVC Tutorial
Tạo ứng dụng Java RESTful Client với thư viện OkHttp
Runnable vs. Callable in Java