穩定婚姻問題模板

2022-03-11 14:31:35 字數 1084 閱讀 3424

題目鏈結

這題寫的一把辛酸淚,第一次用getchar()讀入,再加上很少用scanf()讀入字元,被輸入輸出緩衝安排的明明白白,最後放棄**,用cin,還是死活沒有輸出,最後才發現是因為for迴圈多加了一步,白被坑了有一天。

演算法分析:首先把每個男士加入佇列,讓每乙個沒配對的男士去向女士請求配對,如果女士沒有配偶,直接答應,如果有配偶,就將配偶的優先順序和當前男士的優先順序作比較,如果更喜歡當前的男士,就把配偶踢掉,重新和這個男士配對,被踢掉的男士重新加入佇列。

因為題目要求是有利於男士的配對,這樣配對可以保證男士的配偶都是能找到的最好的,女士的是能找到最差的。

如果想有利於女士的配對,直接把主動的換成女士就好。

總而言之,就是主動者得利。

具體證明可看這個博文:

1 #include2

using

namespace

std;

3 typedef long

long

ll;4

int a[30],b[30],m_like[30][30],w_like[30][30],now[30],wife[30],husband[30

];5 queueq;

6void engage(int man,int

woman)

12 husband[woman]=man;

13 wife[man]=woman;14}

15int

main()

1630

for(int i=1;i<=n;i++)

34for(int i=0;i)//

將男士加入佇列,now陣列標記男士配對到第幾個女士了,注意j從2開始,所以now陣列也從2開始

41 q.push(ch-'

a');now[ch-'

a']=2,wife[ch-'

a']=-1;42

}43for(int i=0;i) husband[ch-'

a']=-1;50

}51while(!q.empty())

58for(int i=0;i)61}

62 }

穩定婚姻問題

穩定婚姻是組合數學裡面的乙個問題。問題大概是這樣 有乙個社團裡有n個女生和n個男生,每位女生按照她的偏愛程度將男生排序,同時每位男生也按照自己的偏愛程度將女生排序。然後將這n個女生和n個男生配成完備婚姻。如果存在兩位女生a和b,兩位男生a和b,使得a和a結婚,b和b結婚,但是a更偏愛b而不是a,b更...

穩定婚姻問題

著名的穩定婚姻問題是美國數學家 經濟學家lloyd stowell shapley 1923 提出的。下面介紹一下背景 某單位有n個姑娘w1,w2,wn和n個小伙m1,m2 mn。每位姑娘對所有小伙有乙個滿意度排序,每位小伙對所有姑娘也有一滿意度排序。m1 w2 w1 w3 w1 m1 m3 m2 ...

穩定婚姻匹配

要求按照書中 page 5 的 g s 演算法寫乙個匹配程式 由男方發起邀請 第一行資料表示 man woman 的數目 n 接下來的資料中,第乙個 n n 的資料塊表示 man 的優先列表 另乙個 n n 的資料塊表示 woman 的優先列表 5 man woman 的數目 n 2 1 4 5 3...