Java Program to Check Whether a Directed 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 a Directed 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 DirectedEulerianCircuit
{
    private int[][] adjacencyMatrix;
    private int     numberOfNodes;
 
    public DirectedEulerianCircuit(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 DirectedEulerianCircuit.java
$ java DirectedEulerianCircuit
 
Enter the number of nodes in the graph
6
Enter the adjacency matrix
0 1 0 0 0 0 
0 0 1 1 0 0
0 0 0 0 0 0 
0 0 0 0 1 0 
0 0 0 0 0 1
0 0 1 0 0 0
As the graph as two vertices with odd degree, there is no Eulerian Circuit but at least one Eulerian Path.

Related posts:

Set Interface trong Java
Object Type Casting in Java
Java Program to Implement Ternary Search Tree
Java Program to Check if a Given Set of Three Points Lie on a Single Line or Not
Java Program to Implement Pollard Rho Algorithm
How to Return 404 with Spring WebFlux
Spring Security Registration – Resend Verification Email
Reactive Flow with MongoDB, Kotlin, and Spring WebFlux
Java Program to Find the GCD and LCM of two Numbers
Introduction to Spring Data MongoDB
Java Program to Implement Heap’s Algorithm for Permutation of N Numbers
Java InputStream to String
Convert char to String in Java
Spring Boot Application as a Service
Write/Read cookies using HTTP and Read a file from the internet
Java Program to Check Whether a Given Point is in a Given Polygon
Java Program to Implement Selection Sort
Java Program to Find Location of a Point Placed in Three Dimensions Using K-D Trees
Java Program to Implement Sieve Of Sundaram
Java Program to Implement Segment Tree
Reading an HTTP Response Body as a String in Java
Converting Between Byte Arrays and Hexadecimal Strings in Java
Java Program to Implement the Hungarian Algorithm for Bipartite Matching
Java Program to Find SSSP (Single Source Shortest Path) in DAG (Directed Acyclic Graphs)
Wrapper Classes in Java
Java Program to Implement Unrolled Linked List
Why String is Immutable in Java?
Check if a String is a Palindrome in Java
Java Program to Implement Euler Circuit Problem
Lập trình đa luồng trong Java (Java Multi-threading)
How to Get a Name of a Method Being Executed?
Spring Boot - Thymeleaf