This Java program is Implement Euler Circuit Problem.In graph theory, an Eulerian trail (or Eulerian path) is a trail in a graph which visits every edge exactly once. Similarly, an Eulerian circuit or Eulerian cycle is an Eulerian trail which starts and ends on the same vertex.
Here is the source code of the Java program to Implement Euler Circuit Problem. The Java program is successfully compiled and run on a Linux system. The program output is also shown below.
import java.util.InputMismatchException; import java.util.Scanner; public class EulerCircuit { private int[][] adjacencyMatrix; private int numberOfNodes; public EulerCircuit (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 oddDegreeVertex () { int vertex = -1; for (int node = 1; node <= numberOfNodes; node++) { if ((degree(node) % 2) != 0) { vertex = node; break; } } return vertex; } public void printEulerTourUtil (int vertex) { for (int destination = 1; destination <= numberOfNodes; destination++) { if(adjacencyMatrix[vertex][destination] == 1 && isVaildNextEdge(vertex, destination)) { System.out.println(" source : " + vertex + " destination " + destination); removeEdge(vertex, destination); printEulerTourUtil(destination); } } } public void printEulerTour () { int vertex = 1; if (oddDegreeVertex() != -1) { vertex = oddDegreeVertex(); } printEulerTourUtil(vertex); return; } public boolean isVaildNextEdge (int source, int destination) { int count = 0; for (int vertex = 1; vertex <= numberOfNodes; vertex++) { if (adjacencyMatrix[vertex] == 1) { count++; } } if (count == 1 ) { return true; } int visited[] = new int[numberOfNodes + 1]; int count1 = DFSCount(source, visited); removeEdge(source, destination); for (int vertex = 1; vertex <= numberOfNodes; vertex++) { visited[vertex] = 0; } int count2 = DFSCount(source, visited); addEdge(source, destination); return (count1 > count2 ) ? false : true; } public int DFSCount (int source, int visited[]) { visited = 1; int count = 1; int destination = 1; while (destination <= numberOfNodes) { if(adjacencyMatrix[destination] == 1 && visited[destination] == 0) { count += DFSCount(destination, visited); } destination++; } return count; } public void removeEdge (int source, int destination) { adjacencyMatrix[destination] = 0; adjacencyMatrix[destination] = 0; } public void addEdge (int source, int destination) { adjacencyMatrix[destination] = 1; adjacencyMatrix[destination] = 1; } public static void main (String... arg) { int number_of_nodes; Scanner scanner = null; try { // read the number of nodes System.out.println("Enter the number of nodes in the graph"); scanner = new Scanner(System.in); number_of_nodes = scanner.nextInt(); // read the adjacency matrix 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; } } } System.out.println("the euler path or euler circuit is "); // print euler path or circuit EulerCircuit circuit = new EulerCircuit(number_of_nodes, adjacency_matrix); circuit.printEulerTour(); } catch (InputMismatchException inputMismatch) { System.out.println("Wrong Input format"); } scanner.close(); } }
$javac EulerCircuit.java $java EulerCircuit Enter the number of nodes in the graph 4 Enter the adjacency matrix 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 the euler path or euler circuit is source : 1 destination 2 source : 2 destination 3 source : 3 destination 4 source : 4 destination 1
Related posts:
Spring Boot - Enabling HTTPS
Apache Tiles Integration with Spring MVC
Java Program to Create a Balanced Binary Tree of the Incoming Data
Create a Custom Exception in Java
Guide to the Volatile Keyword in Java
Java Program to Implement Self organizing List
Java Program to Solve a Matching Problem for a Given Specific Case
Java Program to Implement Gale Shapley Algorithm
Spring Boot Configuration with Jasypt
Lập trình đa luồng trong Java (Java Multi-threading)
Giới thiệu SOAP UI và thực hiện test Web Service
Deploy a Spring Boot WAR into a Tomcat Server
Spring Security 5 for Reactive Applications
Java Program to Implement Segment Tree
Spring Cloud Connectors and Heroku
Java Program to Perform Inorder Non-Recursive Traversal of a Given Binary Tree
Java Program to implement Array Deque
Map Serialization and Deserialization with Jackson
Java Program to Find Transitive Closure of a Graph
Java Program to Implement Interpolation Search Algorithm
Creating a Custom Starter with Spring Boot
Java Program to Implement Gaussian Elimination Algorithm
Giới thiệu JDBC Connection Pool
Java Program to Implement Floyd Cycle Algorithm
Java Program to Implement Network Flow Problem
Java 14 Record Keyword
Spring Security Authentication Provider
ThreadPoolTaskExecutor corePoolSize vs. maxPoolSize
New Features in Java 8
Guide to Guava Multimap
Working with Network Interfaces in Java
Spring Webflux with Kotlin