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:
Hướng dẫn Java Design Pattern – DAO
Lớp Collections trong Java (Collections Utility Class)
Hướng dẫn Java Design Pattern – Dependency Injection
Lập trình hướng đối tượng (OOPs) trong java
Java Program to Implement Binary Search Tree
Một số từ khóa trong Java
Exploring the Spring Boot TestRestTemplate
Filtering a Stream of Optionals in Java
The Order of Tests in JUnit
Java Program to Implement Gift Wrapping Algorithm in Two Dimensions
Java Program to Implement Tarjan Algorithm
A Guide to Iterator in Java
Hướng dẫn Java Design Pattern – Flyweight
Thao tác với tập tin và thư mục trong Java
Java Program to Check Whether a Weak Link i.e. Articulation Vertex Exists in a Graph
Injecting Prototype Beans into a Singleton Instance in Spring
Giới thiệu về Stream API trong Java 8
Java Program to Solve TSP Using Minimum Spanning Trees
Java Program to Remove the Edges in a Given Cyclic Graph such that its Linear Extension can be Found
Adding Parameters to HttpClient Requests
Netflix Archaius with Various Database Configurations
Java Program to implement Dynamic Array
Transactions with Spring and JPA
Java Program to Perform Postorder Non-Recursive Traversal of a Given Binary Tree
Java Program to Implement the Monoalphabetic Cypher
Java Program to Implement Hash Tables Chaining with Binary Trees
Java Program to Implement Variable length array
Java Program to Solve a Matching Problem for a Given Specific Case
Java Program to Implement Word Wrap Problem
Custom Error Pages with Spring MVC
Logout in an OAuth Secured Application
Java Program to Find Basis and Dimension of a Matrix