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:
Java Program to Implement Regular Falsi Algorithm
Java Program to Implement Aho-Corasick Algorithm for String Matching
Java Program to Find All Pairs Shortest Path
Logging a Reactive Sequence
Spring MVC Content Negotiation
Java Program to Implement Nth Root Algorithm
Supplier trong Java 8
Java Program to Solve Knapsack Problem Using Dynamic Programming
New Features in Java 8
Java Program to Solve the Fractional Knapsack Problem
Testing in Spring Boot
Hashing a Password in Java
Java Program to Emulate N Dice Roller
ExecutorService – Waiting for Threads to Finish
Java Program to Implement Wagner and Fisher Algorithm for online String Matching
Date Time trong Java 8
HashSet trong java
Copy a List to Another List in Java
A Guide to Queries in Spring Data MongoDB
Hướng dẫn Java Design Pattern – Visitor
Allow user:password in URL
Spring Boot - Enabling HTTPS
Java Program to Implement Sorted Circular Doubly Linked List
Intro to the Jackson ObjectMapper
Java Program to Check Whether a Directed Graph Contains a Eulerian Path
Java Program to Implement Multi-Threaded Version of Binary Search Tree
Java Program to Implement Double Order Traversal of a Binary Tree
Inject Parameters into JUnit Jupiter Unit Tests
HttpClient 4 – Follow Redirects for POST
Java Program to Find Nearest Neighbor Using Linear Search
Sử dụng CountDownLatch trong Java
Spring Boot Application as a Service