国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

穩定婚姻問題(The Stable Marriage Problem)

2019-11-10 20:05:04
字體:
來源:轉載
供稿:網友

RT,該問題可解決n男n女配對問題:每個人有自己理想對象排名,而要使配對后不存在一對男女不是配偶且對于彼此的好感優于當前配偶。 算法流程: 1.每一輪未訂婚的男士向其未求過婚的女士求婚; 2.女士若有男士X向其求婚,如該女士之前沒有未婚夫,則直接將男士X作為該女士臨時的未婚夫,如已有未婚夫且對該男士X的好感比未婚夫更高,則把未婚夫甩了,重新加入單身狗隊列,把X作為未婚夫。 不斷執行上述過程,知道所有男士均找到配偶為止。時間:O(n^2)

看上去對男士有點殘酷,但事實上這樣的流程可以保證男士當前的配偶為可以找到的最好伴侶,畢竟之前求婚都已經被拒絕;而女士只會找到可能找到最差的配偶,至于證明這里略去(好吧,其實是我不會,有興趣的可以看看這篇文章http://blog.sina.com.cn/s/blog_8897e5420101bdr4.html)。 上代碼:

//POJ3487#include <cstdio>#include <algorithm>#include <cstring>#define maxn 30#include <queue>using namespace std;int wife[maxn],now[maxn],husband[maxn],w[maxn],m[maxn],T,n,m_like[maxn][maxn],w_rank[maxn][maxn];queue <int> q;void engage(int man,int woman)//定下臨時的配偶 { int tmp=husband[woman]; if (tmp!=-1) { q.push(tmp);//甩了要重新求婚~~~ wife[tmp]=-1; } wife[man]=woman; husband[woman]=man;}int main(){ scanf("%d",&T); while (T--) { scanf("%d/n",&n); memset(w,0,sizeof(w)); memset(m,0,sizeof(m)); char x; for (int i=0;i<n;i++) scanf("%c ",&x),w[x-'a']=1; for (int i=0;i<n;i++) scanf("%c ",&x),m[x-'A']=1; for (int i=0;i<n;i++) { char ch=getchar(),c; while (ch<'a'||ch>'z') ch=getchar(); c=getchar(); for (int j=0;j<n;j++) c=getchar(),m_like[ch-'a'][j]=c-'A';//男i第j喜歡的為m_like[i][j] q.push(ch-'a');now[ch-'a']=0;wife[ch-'a']=-1; } for (int i=0;i<n;i++) { char ch=getchar(),c; while (ch<'A'||ch>'Z') ch=getchar(); c=getchar(); for (int j=0;j<n;j++) c=getchar(),w_rank[ch-'A'][c-'a']=j;//女i喜歡的j排名為w_rank[i][j] husband[ch-'A']=-1; } while (!q.empty()) { int man=q.front();q.pop(); int woman=m_like[man][now[man]++]; if (husband[woman]==-1) engage(man,woman);//未訂婚 else if (w_rank[woman][man]<w_rank[woman][husband[woman]]) engage(man,woman);//更優則甩了當前未婚夫 else q.push(man);//求婚失敗 } //while (!q.empty()) q.pop(); for (int i=0;i<n;i++) if (m[i])
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武义县| 伽师县| 旺苍县| 阳城县| 新晃| 鲜城| 玉树县| 敖汉旗| 麟游县| 乐亭县| 乌兰浩特市| 九龙县| 镇巴县| 正镶白旗| 长沙县| 敖汉旗| 嵩明县| 嘉义县| 江城| 延长县| 鄱阳县| 雷山县| 泾源县| 汝南县| 平利县| 博乐市| 常山县| 绥滨县| 吉安市| 登封市| 万盛区| 化州市| 华坪县| 钦州市| 宜黄县| 漳州市| 香格里拉县| 余江县| 紫金县| 沾益县| 平南县|