package hu.sztaki.ilab.longneck.util;
import java.util.*;
public class MaxMatching {
static boolean findPath(int u1, boolean[][] d, int[] matching, boolean[] vis) {
vis[u1] = true;
for (int v = 0; v < matching.length; ++v) {
int u2 = matching[v];
if (d[u1][v] && (u2 == -1 || !vis[u2] && findPath(u2, d, matching, vis))) {
matching[v] = u1;
return true;
}
}
return false;
}
public static int maxMatching(boolean[][] d) {
int n1 = d.length;
int n2 = n1 == 0 ? 0 : d[0].length;
int[] matching = new int[n2];
Arrays.fill(matching, -1);
int matches = 0;
for (int u = 0; u < n1; u++)
if (findPath(u, d, matching, new boolean[n1]))
++matches;
return matches;
}
}