This Java program is to check whether graph is bipartite using dfs. In the mathematical field of graph theory, a bipartite graph (or bigraph) is a graph whose vertices can be divided into two disjoint sets and such that every edge connects a vertex in to one in that is, and are each independent sets. Equivalently, a bipartite graph is a graph that does not contain any odd-length cycles.
Here is the source code of the Java program to check whether a graph is biparite using dfs. 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 BipartiteDfs
{
private int numberOfVertices;
private Stack<Integer> stack;
public static final int NO_COLOR = 0;
public static final int RED = 1;
public static final int BLUE = 2;
public BipartiteDfs(int numberOfVertices)
{
this.numberOfVertices = numberOfVertices;
stack = new Stack<Integer>();
}
public boolean isBipartite(int adjacencyMartix[][], int source)
{
int[] colored = new int[numberOfVertices + 1];
for (int vertex = 1; vertex <= numberOfVertices; vertex++)
{
colored[vertex] = NO_COLOR;
}
stack.push(source);
colored = RED;
int element = source;
int neighbours = source;
while (!stack.empty())
{
element = stack.peek();
neighbours = element;
while (neighbours <= numberOfVertices)
{
if (adjacencyMartix[element][neighbours] == 1&& colored[neighbours] == colored[element])
{
return false;
}
if (adjacencyMartix[element][neighbours] == 1 && colored[neighbours] == NO_COLOR)
{
colored[neighbours] = (colored[element] == RED) ? BLUE : RED;
stack.push(neighbours);
element = neighbours;
neighbours = 1;
continue;
}
neighbours++;
}
stack.pop();
}
return true;
}
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();
}
}
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("Enter the source for the graph");
source = scanner.nextInt();
BipartiteDfs bipartiteDfs = new BipartiteDfs(number_of_nodes);
if (bipartiteDfs.isBipartite(adjacency_matrix, source))
{
System.out.println("The given graph is bipartite");
} else
{
System.out.println("The given graph is not bipartite");
}
} catch (InputMismatchException inputMismatch)
{
System.out.println("Wrong Input format");
}
scanner.close();
}
}
$javac BipartiteBfs.java $java BipartiteBfs 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 Enter the source for the graph 1 The given graph is bipartite
Related posts:
Hướng dẫn Java Design Pattern – Prototype
Converting String to Stream of chars
Java Program to Implement Sorted Circularly Singly Linked List
Guide to the Java TransferQueue
Mapping a Dynamic JSON Object with Jackson
Spring Webflux with Kotlin
Java Program to Implement Fisher-Yates Algorithm for Array Shuffling
Netflix Archaius with Various Database Configurations
Java – Reader to String
Feign – Tạo ứng dụng Java RESTful Client
Guide to @JsonFormat in Jackson
Getting Started with GraphQL and Spring Boot
How to Get the Last Element of a Stream in Java?
Java Program to Implement Euclid GCD Algorithm
Java Program to Implement LinkedList API
Java Program to Generate Random Hexadecimal Byte
Pagination and Sorting using Spring Data JPA
Spring Boot - Internationalization
Check If a File or Directory Exists in Java
Java Program to Check Whether a Given Point is in a Given Polygon
Java Program to Implement ConcurrentSkipListMap API
Java 8 Collectors toMap
Consuming RESTful Web Services
Java InputStream to String
Java Program to Implement vector
Java Program to Generate Random Partition out of a Given Set of Numbers or Characters
Configure a RestTemplate with RestTemplateBuilder
Java Switch Statement
Java Program to implement Circular Buffer
Jackson Unmarshalling JSON with Unknown Properties
Send an email using the SMTP protocol
Java Streams vs Vavr Streams