Java Program to Check whether Graph is a Bipartite using DFS

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:

Comparing getPath(), getAbsolutePath(), and getCanonicalPath() in Java
Giới thiệu HATEOAS
Java Program to Implement Cubic convergence 1/pi Algorithm
A Quick Guide to Using Keycloak with Spring Boot
Apache Commons Collections SetUtils
Java Program to Implement Solovay Strassen Primality Test Algorithm
Guide to java.util.concurrent.Locks
Java Program to Generate All Subsets of a Given Set in the Lexico Graphic Order
Removing all duplicates from a List in Java
Java Program to Implement PrinterStateReasons API
Java Program to Implement Extended Euclid Algorithm
Java Program to Implement RoleUnresolvedList API
Java Program to Perform Preorder Recursive Traversal of a Given Binary Tree
Guide to the Java ArrayList
Command-Line Arguments in Java
Programmatic Transaction Management in Spring
Java Program to Implement PriorityQueue API
Spring Boot - Quick Start
Java Program to Implement Quick Hull Algorithm to Find Convex Hull
Introduction to Using FreeMarker in Spring MVC
@DynamicUpdate with Spring Data JPA
Lớp Properties trong java
Java Program to Generate Random Hexadecimal Byte
Adding Parameters to HttpClient Requests
Java Program to Implement Ternary Search Algorithm
Spring Cloud AWS – RDS
Life Cycle of a Thread in Java
Java Program to Implement Gift Wrapping Algorithm in Two Dimensions
Concurrent Test Execution in Spring 5
Java Program to Generate All Possible Combinations of a Given List of Numbers
Java Program to Implement Control Table
Java Program to Implement Branch and Bound Method to Perform a Combinatorial Search