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:
Changing Annotation Parameters At Runtime
wait() and notify() Methods in Java
Read an Outlook MSG file
How to Define a Spring Boot Filter?
Spring Boot - Rest Template
Java Program to Implement ConcurrentHashMap API
Adding Shutdown Hooks for JVM Applications
Format ZonedDateTime to String
Rest Web service: Filter và Interceptor với Jersey 2.x (P1)
Java Program to Perform Stooge Sort
Guide to DelayQueue
Java Program to Delete a Particular Node in a Tree Without Using Recursion
Java Program to Implement Knapsack Algorithm
Implementing a Binary Tree in Java
Java Program to Implement Singly Linked List
Check If Two Lists are Equal in Java
Migrating from JUnit 4 to JUnit 5
A Guide to WatchService in Java NIO2
Java Program to Remove the Edges in a Given Cyclic Graph such that its Linear Extension can be Found
Request Method Not Supported (405) in Spring
Finding bridges in a graph in $O(N+M)$
Mockito and JUnit 5 – Using ExtendWith
Guide to CountDownLatch in Java
Mapping Nested Values with Jackson
Quick Guide to Spring Controllers
Sao chép các phần tử của một mảng sang mảng khác như thế nào?
Java Program to Solve a Matching Problem for a Given Specific Case
Introduction to Spring MVC HandlerInterceptor
Java Program to Perform Encoding of a Message Using Matrix Multiplication
Prevent Brute Force Authentication Attempts with Spring Security
Spring Data JPA @Query
Introduction to Spliterator in Java