Java Program to Check Whether a Directed Graph Contains a Eulerian Path

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 Directed Graph Contains a Eulerian Path. 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 DirectedEulerPath
{
    private int[][] adjacencyMatrix;
    private int     numberOfNodes;
 
    public DirectedEulerPath(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();
                }
            }
            DirectedEulerPath path = new DirectedEulerPath(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 DirectedEulerPath.java
$ java DirectedEulerPath
 
Enter the number of nodes in the graph
4
Enter the adjacency matrix
0 1 1 1
1 0 1 0
1 1 0 1
1 0 1 0
As the graph as two vertices with odd degree, there is no Eulerian Circuit but at least one Eulerian Path.

Related posts:

Java Program to Find Second Smallest of n Elements with Given Complexity Constraint
Java Program to Implement Uniform-Cost Search
Chương trình Java đầu tiên
Java Program to Find Nearest Neighbor for Dynamic Data Set
Java Program to Implement Queue using Linked List
Java Program to Implement Suffix Array
Java Program to Implement RoleUnresolvedList API
Collection trong java
Java Program to Solve Tower of Hanoi Problem using Stacks
Xây dựng ứng dụng Client-Server với Socket trong Java
Java Program to Implement Bresenham Line Algorithm
Spring Cloud AWS – EC2
Java Program to Perform Uniform Binary Search
Java Program to Implement the Checksum Method for Small String Messages and Detect
Java Program to Check Cycle in a Graph using Topological Sort
Java Program to Perform Arithmetic Operations on Numbers of Size
Giới thiệu Google Guice – Injection, Scope
Constructor Dependency Injection in Spring
New Stream Collectors in Java 9
JUnit5 Programmatic Extension Registration with @RegisterExtension
Java Program to Implement the Hungarian Algorithm for Bipartite Matching
Guide to CountDownLatch in Java
Removing all duplicates from a List in Java
Reactive Flow with MongoDB, Kotlin, and Spring WebFlux
Java Program to Implement Find all Back Edges in a Graph
Java Program to Implement Skip List
Java Perform to a 2D FFT Inplace Given a Complex 2D Array
Using Custom Banners in Spring Boot
Java Program to Implement Graph Coloring Algorithm
Setting the Java Version in Maven
Spring REST API + OAuth2 + Angular
Send email with authentication