Java Program to Implement Find all Back Edges in a Graph

This Java program,performs the DFS traversal on the given graph represented by a adjacency matrix to find all the back edges in a graph.the DFS traversal makes use of an stack.

Here is the source code of the Java program to find the back Edges.The Java program is successfully compiled and run on a Linux system. The program output is also shown below.

import java.util.HashMap;
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.Set;
import java.util.Stack;
 
public class BackEdges
{
    private Stack<Integer> stack;
    private HashMap<Integer, Integer> backEdges;
    private int adjacencyMatrix[][];
 
    public BackEdges() 
    {
        stack = new Stack<Integer>();
        backEdges = new HashMap<Integer, Integer>();
    }
 
    public void dfs(int adjacency_matrix[][], int source)
    {
        int number_of_nodes = adjacency_matrix.length - 1;
        adjacencyMatrix = new int[number_of_nodes + 1][number_of_nodes + 1];
        for (int sourcevertex = 1; sourcevertex <= number_of_nodes; sourcevertex++)
        {
            for (int destinationvertex = 1; destinationvertex <= number_of_nodes; destinationvertex++)
            {
                adjacencyMatrix[sourcevertex][destinationvertex] = 
                         adjacency_matrix[sourcevertex][destinationvertex];
            }
        }
 
        int visited[] = new int[number_of_nodes + 1];		
        int element = source;		
        int destination = source;			
        visited = 1;		
        stack.push(source);
 
        while (!stack.isEmpty())
        {
            element = stack.peek();
            destination = element;	
	    while (destination <= number_of_nodes)
	    {
                if (adjacencyMatrix[element][destination] == 1 && visited[destination] == 1)
                {
                    if (stack.contains(destination))
                    {	
                        backEdges.put(element, destination);
                        adjacencyMatrix[element][destination]= 0;	
                    }
                }
 
     	        if (adjacencyMatrix[element][destination] == 1 && visited[destination] == 0)
	        {
                    stack.push(destination);
                    visited[destination] = 1;
                    adjacencyMatrix[element][destination] = 0;
                    element = destination;
                    destination = 1;
	            continue;
                }  
                destination++;
	    }
            stack.pop();	
        }	
    }
 
    public void printBackEdges()
    {
        System.out.println("\nSOURCE  : DESTINATION");
        Set<Integer> source = backEdges.keySet();
        for (Integer sourcevertex : source)
        {
            System.out.println(sourcevertex + "\t:\t"+ backEdges.get(sourcevertex));
        }
    }
 
    public static void main(String...arg)
    {
        int number_of_nodes, source;
        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();
 
   	    System.out.println("Enter the source for the graph");
            source = scanner.nextInt(); 
 
            BackEdges backEdges = new BackEdges();
            backEdges.dfs(adjacency_matrix, source);
            backEdges.printBackEdges();
 
        }catch(InputMismatchException inputMismatch)
        {
            System.out.println("Wrong Input format");
        }	
        scanner.close();	
    }	
}
$javac BackEdges.java
$java BackEdges
Enter the number of nodes in the graph
4
Enter the adjacency matrix
0 1 0 0 
0 0 1 0
0 0 0 1
0 1 0 0 
Enter the source for the graph
1
The Back Edges are given by
 
SOURCE  : DESTINATION
4	:	2

Related posts:

HttpAsyncClient Tutorial
Spring Boot - Enabling Swagger2
Hướng dẫn Java Design Pattern – Template Method
Converting Between an Array and a Set in Java
Serverless Functions with Spring Cloud Function
Adding Shutdown Hooks for JVM Applications
Join and Split Arrays and Collections in Java
Spring Boot Gradle Plugin
Removing all Nulls from a List in Java
Java Program to Use Boruvka’s Algorithm to Find the Minimum Spanning Tree
Java Program to Implement the MD5 Algorithm
Java Program to Implement Johnson’s Algorithm
Java Program to Implement Ternary Heap
Cơ chế Upcasting và Downcasting trong java
Spring Boot: Customize Whitelabel Error Page
A Guide to JUnit 5 Extensions
The StackOverflowError in Java
Java Program to Implement Miller Rabin Primality Test Algorithm
REST Web service: HTTP Status Code và xử lý ngoại lệ RESTful web service với Jersey 2.x
Refactoring Design Pattern với tính năng mới trong Java 8
Java Program to Implement Splay Tree
Clique in the Divisibility Graph
Hướng dẫn Java Design Pattern – Flyweight
Java Program to Perform Left Rotation on a Binary Search Tree
Java Program to Implement wheel Sieve to Generate Prime Numbers Between Given Range
Collect a Java Stream to an Immutable Collection
Tổng quan về ngôn ngữ lập trình java
Java Program to Find the Edge Connectivity of a Graph
Java Program to Find Hamiltonian Cycle in an UnWeighted Graph
Java Program to Implement TreeMap API
Java Program to Implement Vector API
Giới thiệu JDBC Connection Pool