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:

Java Program to Generate Random Partition out of a Given Set of Numbers or Characters
Removing all duplicates from a List in Java
Versioning a REST API
Java Program to Implement Repeated Squaring Algorithm
Java Program to Implement LinkedBlockingDeque API
Java Program to Find Shortest Path Between All Vertices Using Floyd-Warshall’s Algorithm
Java Program to Implement First Fit Decreasing for 1-D Objects and M Bins
Java Program to Find Number of Articulation points in a Graph
Debug a HttpURLConnection problem
Java Program to Implement Bit Array
Logout in an OAuth Secured Application
How to Manually Authenticate User with Spring Security
Java Program to Search Number Using Divide and Conquer with the Aid of Fibonacci Numbers
Java Program to Perform Postorder Recursive Traversal of a Given Binary Tree
Java Program to Find ith Largest Number from a Given List Using Order-Statistic Algorithm
Một số ký tự đặc biệt trong Java
Spring Data Java 8 Support
Giới thiệu thư viện Apache Commons Chain
Spring Boot - Google Cloud Platform
Tiêu chuẩn coding trong Java (Coding Standards)
New Stream Collectors in Java 9
Java Program to Implement Sorted Array
Using JWT with Spring Security OAuth (legacy stack)
Java Program to Create a Random Linear Extension for a DAG
Java Program to Represent Graph Using Incidence List
An Intro to Spring Cloud Task
SOAP Web service: Upload và Download file sử dụng MTOM trong JAX-WS
Constructor Dependency Injection in Spring
Iterable to Stream in Java
Java Program to implement Array Deque
Injecting Prototype Beans into a Singleton Instance in Spring
Stack Memory and Heap Space in Java