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 Perform Inorder Recursive Traversal of a Given Binary Tree
Dockerizing a Spring Boot Application
Spring’s RequestBody and ResponseBody Annotations
HttpClient Connection Management
Java Program to Perform Searching in a 2-Dimension K-D Tree
Spring Boot - Apache Kafka
Java 9 Stream API Improvements
Java Program to Implement Aho-Corasick Algorithm for String Matching
Pagination and Sorting using Spring Data JPA
Java Program to Construct a Random Graph by the Method of Random Edge Selection
Apache Commons Collections MapUtils
HashSet trong Java hoạt động như thế nào?
Java Program to Implement ConcurrentLinkedQueue API
Java Program to Perform Postorder Non-Recursive Traversal of a Given Binary Tree
Use Liquibase to Safely Evolve Your Database Schema
Tìm hiểu cơ chế Lazy Evaluation của Stream trong Java 8
Tính đóng gói (Encapsulation) trong java
Introduction to Spring MVC HandlerInterceptor
Java Program to Implement Horner Algorithm
Inheritance and Composition (Is-a vs Has-a relationship) in Java
Java Program to Check Whether a Weak Link i.e. Articulation Vertex Exists in a Graph
Comparing Objects in Java
Java Program to Implement Hash Tables with Quadratic Probing
Merging Two Maps with Java 8
Java List UnsupportedOperationException
Quick Intro to Spring Cloud Configuration
Configuring a DataSource Programmatically in Spring Boot
Java – Delete a File
Java Program to Implement Rolling Hash
New Features in Java 8
Request Method Not Supported (405) in Spring
Circular Dependencies in Spring