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:

Từ khóa static và final trong java
Loại bỏ các phần tử trùng trong một ArrayList như thế nào trong Java 8?
A Guide to JUnit 5
Java – Convert File to InputStream
Java Program to Repeatedly Search the Same Text (such as Bible by building a Data Structure)
Java Program to Implement ArrayBlockingQueue API
Java Program to Implement Self organizing List
Java Program to Implement Brent Cycle Algorithm
Hướng dẫn Java Design Pattern – Bridge
Java Program to Implement Ford–Fulkerson Algorithm
OAuth2 Remember Me with Refresh Token
Exploring the New Spring Cloud Gateway
Mệnh đề Switch-case trong java
Giới thiệu Google Guice – Aspect Oriented Programming (AOP)
String Initialization in Java
Java Program to Implement Interpolation Search Algorithm
Java Program to Decode a Message Encoded Using Playfair Cipher
The DAO with JPA and Spring
Java Program to Find Transitive Closure of a Graph
Java Program to Implement Dijkstra’s Algorithm using Priority Queue
Java – Reader to InputStream
Java Program to Implement JobStateReasons API
A Guide to EnumMap
Spring Boot - Admin Client
Java Program to Construct a Random Graph by the Method of Random Edge Selection
The SpringJUnitConfig and SpringJUnitWebConfig Annotations in Spring 5
Java Program to Implement Skip List
DistinctBy in the Java Stream API
Java Program to Implement Hamiltonian Cycle Algorithm
Java Program to Check Whether an Input Binary Tree is the Sub Tree of the Binary Tree
Tạo ứng dụng Java RESTful Client với thư viện Retrofit
Guide to System.gc()