Java Program to Implement Find all Forward Edges in a Graph

This Java program,performs the DFS traversal on the given graph represented by a adjacency matrix to find all the forward edges in a graph.Forward Edges are which point from a node of the tree to one of its descendants.the DFS traversal makes use of an stack.

Here is the source code of the Java program to find the Forward Edges. 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;
import java.util.Stack;
 
public class ForwardEgde
{
    private Stack<Integer> stack;
    private HashMap<Integer, Integer> forwardEdges;
    private int adjacencyMatrix[][];
 
    public ForwardEdge() 
    {
        stack = new Stack<Integer>();
        forwardEdges = 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))
                    {
                        if (element < destination )	
                            forwardEdges.put(element, destination);	
                    }
                }
                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 printForwardEdges()
    {
        System.out.println("\nSOURCE  : DESTINATION");
        Set<Integer> source = forwardEdges.keySet();
        for (Integer sourcevertex : source)
        {
            System.out.println(sourcevertex + "\t:\t"+ forwardEdges.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(); 
 
            ForwardEdge forwardEdge = new ForwardEdge();
            forwardEdge.dfs(adjacency_matrix, source);
            forwardEdge.printForwardEdges();
 
        }catch(InputMismatchException inputMismatch)
        {
            System.out.println("Wrong Input format");
        }	
        scanner.close();	
    }	
}
$javac ForwardEdge.java
$java ForwardEdge
Enter the number of nodes in the graph
4
 
Enter the adjacency matrix
0 1 1 0
0 0 1 0
0 0 0 1
1 0 0 0
 
Enter the source for the graph
1
 
The Forward Edges are
SOURCE  : DESTINATION
1	:	3

Related posts:

Command-Line Arguments in Java
Batch Processing with Spring Cloud Data Flow
Convert String to int or Integer in Java
Giới thiệu Google Guice – Binding
Java Program to Find Second Smallest of n Elements with Given Complexity Constraint
Java Program to Solve Set Cover Problem assuming at max 2 Elements in a Subset
Java Program to Perform Stooge Sort
Java Program to Find the Number of Ways to Write a Number as the Sum of Numbers Smaller than Itself
Guide to Spring 5 WebFlux
Java Program to Implement Counting Sort
Java Program to Implement Ternary Search Algorithm
Quản lý bộ nhớ trong Java với Heap Space vs Stack
Java Program to Apply DFS to Perform the Topological Sorting of a Directed Acyclic Graph
Spring REST API + OAuth2 + Angular
Java Program to Implement Pollard Rho Algorithm
Java Program to Perform String Matching Using String Library
Java Program to Check Whether a Directed Graph Contains a Eulerian Path
Java Program to Implement Sparse Matrix
Java Program to Implement Leftist Heap
Guide to the Java TransferQueue
Implementing a Binary Tree in Java
Java Program to implement Circular Buffer
Chuyển đổi từ HashMap sang ArrayList
Java Program to Implement Binomial Tree
Java Program to Implement Multi-Threaded Version of Binary Search Tree
Java Program to Find the Connected Components of an UnDirected Graph
Different Ways to Capture Java Heap Dumps
Java Program to Implement Sorted Circular Doubly Linked List
Java Program to Implement Doubly Linked List
Hướng dẫn Java Design Pattern – Service Locator
Mapping Nested Values with Jackson
Transactions with Spring and JPA