Advertisement
flash_7

Stable Marriage Algorithm

Apr 6th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. int N;
  2. int WP[Size][Size]; /// How much woman w prefer man m
  3. int wPartner[Size]; /// Current partner of man m
  4. int mPartner[Size]; /// Current partner of woman w
  5. int prefer[Size][Size]; /// Preference of all people
  6.  
  7. void stableMarriage(){
  8.     for(int w = N+1;w<=2*N;w++){
  9.         for(int i = 1;i<=N;i++){
  10.             int m = prefer[w][i];
  11.             WP[w][m] = N - i;
  12.         }
  13.     }
  14.     CLR(wPartner, -1);
  15.     CLR(mPartner, -1);
  16.  
  17.     int freeMan = N;
  18.  
  19.     while (freeMan != 0){ /// All the men are still not engaged
  20.         int m1; /// The first man in the list who is currently free.
  21.         for (m1 = 1; m1 <= N; m1++){
  22.             if (mPartner[m1] == -1) break;
  23.         }
  24.         for (int i = 1; i <= N && mPartner[m1] == -1; i++){ /// Traverse for each women till m1 is free.
  25.             int w = prefer[m1][i];
  26.             if (wPartner[w] == -1){ /// Current women is free. So engage m1 with w.
  27.                 wPartner[w] = m1;
  28.                 mPartner[m1] = w;
  29.                 freeMan--;
  30.             }else {
  31.                 int m2 = wPartner[w]; /// Current women is currently engaged to m2.
  32.                 if (WP[w][m1] > WP[w][m2]){ /// Does she prefer m1 over m2?
  33.                     wPartner[w] = m1;
  34.                     mPartner[m1] = w;
  35.                     mPartner[m2] = -1;
  36.                 }
  37.             }
  38.         }
  39.     }
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement