This is a Java Program to Implement Hopcroft Karp Algorithm. The Hopcroft–Karp algorithm is an algorithm that takes as input a bipartite graph and produces as output a maximum cardinality matching – a set of as many edges as possible with the property that no two edges share an endpoint.
Here is the source code of the Java Program to Implement Hopcroft Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/**
** Java Program to Implement Hopcroft Algorithm
**/
import java.util.*;
/** Class Hopcroft **/
public class Hopcroft
{
private final int NIL = 0;
private final int INF = Integer.MAX_VALUE;
private ArrayList<Integer>[] Adj;
private int[] Pair;
private int[] Dist;
private int cx, cy;
/** Function BFS **/
public boolean BFS()
{
Queue<Integer> queue = new LinkedList<Integer>();
for (int v = 1; v <= cx; ++v)
if (Pair[v] == NIL)
{
Dist[v] = 0;
queue.add(v);
}
else
Dist[v] = INF;
Dist[NIL] = INF;
while (!queue.isEmpty())
{
int v = queue.poll();
if (Dist[v] < Dist[NIL])
for (int u : Adj[v])
if (Dist[Pair[u]] == INF)
{
Dist[Pair[u]] = Dist[v] + 1;
queue.add(Pair[u]);
}
}
return Dist[NIL] != INF;
}
/** Function DFS **/
public boolean DFS(int v)
{
if (v != NIL)
{
for (int u : Adj[v])
if (Dist[Pair[u]] == Dist[v] + 1)
if (DFS(Pair[u]))
{
Pair[u] = v;
Pair[v] = u;
return true;
}
Dist[v] = INF;
return false;
}
return true;
}
/** Function to get maximum matching **/
public int HopcroftKarp()
{
Pair = new int[cx + cy + 1];
Dist = new int[cx + cy + 1];
int matching = 0;
while (BFS())
for (int v = 1; v <= cx; ++v)
if (Pair[v] == NIL)
if (DFS(v))
matching = matching + 1;
return matching;
}
/** Function to make graph with vertices x , y **/
public void makeGraph(int[] x, int[] y, int E)
{
Adj = new ArrayList[cx + cy + 1];
for (int i = 0; i < Adj.length; ++i)
Adj[i] = new ArrayList<Integer>();
/** adding edges **/
for (int i = 0; i < E; ++i)
addEdge(x[i] + 1, y[i] + 1);
}
/** Function to add a edge **/
public void addEdge(int u, int v)
{
Adj[u].add(cx + v);
Adj[cx + v].add(u);
}
/** Main Method **/
public static void main (String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Hopcroft Algorithm Test\n");
/** Make an object of Hopcroft class **/
Hopcroft hc = new Hopcroft();
/** Accept number of edges **/
System.out.println("Enter number of edges\n");
int E = scan.nextInt();
int[] x = new int[E];
int[] y = new int[E];
hc.cx = 0;
hc.cy = 0;
System.out.println("Enter "+ E +" x, y coordinates ");
for (int i = 0; i < E; i++)
{
x[i] = scan.nextInt();
y[i] = scan.nextInt();
hc.cx = Math.max(hc.cx, x[i]);
hc.cy = Math.max(hc.cy, y[i]);
}
hc.cx += 1;
hc.cy += 1;
/** make graph with vertices **/
hc.makeGraph(x, y, E);
System.out.println("\nMatches : "+ hc.HopcroftKarp());
}
}
Hopcroft Algorithm Test Enter number of edges 11 Enter 11 x, y coordinates 0 0 0 3 1 0 1 2 1 4 2 1 3 0 3 2 3 3 3 4 4 2 Matches : 5
Related posts:
Java Program to Perform String Matching Using String Library
Java Program to Implement Heap’s Algorithm for Permutation of N Numbers
Ignore Null Fields with Jackson
Java Program to Find SSSP (Single Source Shortest Path) in DAG (Directed Acyclic Graphs)
Extract network card address
Toán tử trong java
Spring Boot - Tomcat Port Number
Java Program to Implement Dijkstra’s Algorithm using Set
Spring Cloud Series – The Gateway Pattern
Server-Sent Events in Spring
Guide to the Fork/Join Framework in Java
Check If a File or Directory Exists in Java
Spring Boot - Flyway Database
Spring WebClient and OAuth2 Support
Exploring the Spring 5 WebFlux URL Matching
Java Program to Implement Segment Tree
A Guide to WatchService in Java NIO2
REST Web service: Upload và Download file với Jersey 2.x
Spring Security Remember Me
Most commonly used String methods in Java
Prevent Cross-Site Scripting (XSS) in a Spring Application
Java Program to Find the Minimum Element of a Rotated Sorted Array using Binary Search approach
Concatenating Strings In Java
Java Program to Implement Cartesian Tree
Java Program to Check whether Graph is a Bipartite using BFS
How to Read HTTP Headers in Spring REST Controllers
Java Program to Solve a Matching Problem for a Given Specific Case
Functional Interface trong Java 8
Java Program to Implement Floyd-Warshall Algorithm
Java String Conversions
Java Program to Implement Hash Tables
A Guide to the finalize Method in Java