Java Program to Check Whether an Undirected Graph Contains a Eulerian Cycle

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 Create a Minimal Set of All Edges Whose Addition will Convert it to a Strongly Conne...
Java Program to Implement Cartesian Tree
Một số từ khóa trong Java
Java Program to Find the Median of two Sorted Arrays using Binary Search Approach
Spring Boot - Interceptor
Tính đóng gói (Encapsulation) trong java
Từ khóa this và super trong Java
Xử lý ngoại lệ đối với trường hợp ghi đè phương thức trong java
Performance Difference Between save() and saveAll() in Spring Data
Tạo số và chuỗi ngẫu nhiên trong Java
Java Program to Implement Red Black Tree
Java Program to Implement Branch and Bound Method to Perform a Combinatorial Search
Spring Boot - Introduction
New in Spring Security OAuth2 – Verify Claims
Spring’s RequestBody and ResponseBody Annotations
Request Method Not Supported (405) in Spring
Netflix Archaius with Various Database Configurations
Java – Write an InputStream to a File
Error Handling for REST with Spring
Java Deep Learning Essentials - Yusuke Sugomori
REST Web service: Tạo ứng dụng Java RESTful Client với Jersey Client 2.x
Java Program to Find Transitive Closure of a Graph
Java Program to Implement Insertion Sort
Java Program to Implement Hash Tables with Double Hashing
Java Program to find the peak element of an array using Binary Search approach
Java Program to Find Strongly Connected Components in Graphs
New Features in Java 8
Spring WebClient Requests with Parameters
Java Program to Sort an Array of 10 Elements Using Heap Sort Algorithm
Java Program to Implement Quick Hull Algorithm to Find Convex Hull
Introduction to the Java ArrayDeque
Java Program to Implement Circular Singly Linked List