package com.interview.array; public class StableMarriageProblem { private boolean checkIfNewIsBetter(int priority[][], int bride, int currentGroom, int suitor) { for (int groom : priority[bride]) { if (currentGroom == groom) { return false; } if (suitor == groom) { return true; } } return false; } public int[] findPair(int[][] priority) { int pair = priority[0].length; int groomToBride[] = new int[pair]; int brideToGroom[] = new int[pair]; for(int i=0; i < groomToBride.length; i++){ groomToBride[i] = -1; } for(int i=0; i < brideToGroom.length; i++){ brideToGroom[i] = -1; } int groom ; int remaingGrooms = pair; while (remaingGrooms > 0) { groom = -1; for (int hasBride : groomToBride) { if (hasBride != -1) { continue; } groom++; for (int bride : priority[groom]) { if (brideToGroom[bride-pair] == -1) { groomToBride[groom] = bride; brideToGroom[bride-pair] = groom; remaingGrooms--; break; } else { boolean flag = checkIfNewIsBetter(priority, bride, brideToGroom[bride-pair], groom); if (flag) { int currentGroom = brideToGroom[bride-pair]; brideToGroom[bride-pair] = groom; groomToBride[groom] = bride; groomToBride[currentGroom] = -1; } } } } } return groomToBride; } public static void main(String args[]){ int priority[][] = {{5,4,7,6}, {4,5,6,7}, {5,4,6,7}, {5,4,7,6}, {0,1,2,3}, {0,1,3,2}, {0,3,1,2}, {0,1,2,3}}; StableMarriageProblem smp = new StableMarriageProblem(); int[] result = smp.findPair(priority); for(int i=0; i < result.length; i++){ System.out.println(i + " " + result[i]); } } }