Poj 3487 穩定婚姻問題

2021-07-05 04:55:32 字數 1504 閱讀 5675

穩定婚姻問題:有n個男人,n個女人。每個人都有乙個對異性的排名(1~n),假設男人主動追求女人,根據這些排名,我們需要將這些男女進行牽線,使得他們的婚姻穩定。

由於穩定不太好定義,我們定義一下不穩定。

不穩定婚姻:對於任意乙個男人m, 假設其當前配偶為w, 若存在乙個女人w1, 其當前配偶為m1, 她在m 的排名中比w靠前,同時,m在w1的排名中比她現任丈夫m1靠前,這時候我們稱婚姻(m, w)為不穩定婚姻。

整個男女集合中不存在不穩定婚姻則這個集合為穩定婚姻集合。

那麼,如何找到穩定婚姻呢? 演算法步驟:

從第乙個男人開始,找到其排名中最高的女人,

若這個女人單身,則

兩人結合

否則若當前男人在這個女人的排名比其現任丈夫高,則

則當前男人與這個女人結合。這個女人原丈夫變為單身。

直到所有男人都找到配偶演算法結束。

poj 3487是一道穩定婚姻的入門題。因為需要處理的是字串,所有這道題的儲存結構稍微有點麻煩,用了兩次雜湊。

#include#include#include#include#includeusing namespace std;

const int n = 32;

typedef vector::iterator vc_i;

char male[n];

char female[n];

char in[128];

int hs[256];

int nhs[256];

int matched[256];

queueque;

vectorg[n<<1];

int getlev(int f, char m)

return ret;

}int main()

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

int num = 0;

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

for(; j < len; j++)

g[hs[in[0]]].push_back(in[j]);

que.push(i);

}for(int i = 0; i < n; i++)

for(; j < len; j++)

g[hs[in[0]]].push_back(in[j]);

}while(!que.empty())

else}}

}// sort(nhs, nhs + n); //根據題意是需要排序的,但沒排序也過了。

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

printf("%c %c\n", nhs[i], nhs[matched[i]]);

puts("");

}return 0;

}

poj3487 穩定婚姻問題

穩定婚姻問題,雖然簡單,但是挺有意思的。poj3487中要注意,這道題中的字母並不是一定要從a開始連續的,注意哦。include include include includeusing namespace std char male 26 char female 26 int n int t in...

穩定婚姻問題

穩定婚姻是組合數學裡面的乙個問題。問題大概是這樣 有乙個社團裡有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 ...