婚姻匹配问题

问题描述:有N男N女,每个人都按照他对异性的喜欢程度排名。现在需要写出一个算法安排这N个男的、N个女的结婚,要求两个人的婚姻应该是稳定的。何为稳定?有两对夫妻M1 F2,M2 F1。M1心目中更喜欢F1,但是他和F2结婚了,M2心目中更喜欢F2,但是命运却让他和F1结婚了,显然这样的婚姻是不稳定的,随时都可能发生M1和F1私奔或者M2和F2私奔的情况。所以在做出匹配选择的时候(也就是结婚的时候),我们需要做出稳定的选择,以防这种情况的发生。要求:boys和girls各自给出自己心仪的嘉宾的顺序,请编写程序求出一种稳定的匹配,使匹配结果不会发生私奔现象。

本题主要是争对从男性优先发出邀约选择,女士来接受或拒绝,匹配的结果对发出邀约方有利,即男性找到的配偶满意度高。

在最开始输入需要配对的对数num;boyper[num][num]定义一个数组存放女生在男生心中的排位;girlper[num][num]定义一个数组存放男生在女生心中的排位;定义一个q确定数字是否在配对对数范围内;然后输入各个男生女生心目中另一半的排名q,如果q在范围内则带入数组j的位置。

定义一个数组来存放各男女的对象其中i为其对应数组位置,内容为其对象的号,也就是从一开始的号,所以初始化为0代表他们都没有对象;为了保证追求过的不再重复追求,男性渴望追求的偏好女性在不断更新,初始大家都为0 从偏好数组第一位开始 i为这个男生的对应数组位置,内容用于约会女生的对于位置。然后看看有没有男生存在没对象,如果有,按序号遍历所有男生看看谁没有,如果某男士没有对象,优先追求偏好高的女生(在心目中排名靠前的女生),存储当前男生还未追求的最高偏好女性的号即是哪个女生 (boychase),然后判断这个女生有没有现任,如果为boychasebf=0就是没男朋友为其他数字就是男朋友是哪个。如果女孩有现任,然后判断是否稳定,如果被追求女生更喜欢现任!则女孩继续和现任在一起,如果该男生比该男生准备追求的女士的现任在心目中更好,女孩现任变成单身,该男士的对象变成准备追求的女士,女士的对象变成该男士。如果女孩没有现任,女生和追求的男生在一起。然后boyml[i]++该男生的偏好移动,这个女生已经追过,继续循环。循环结束后输出最终结果,谁和谁最终在一起了。

其中有一个current_male_is_better函数,用来比较某女士现在的对象和追求者哪个在她心目中排行更高, 数组参数是一维(是一位女士的优先表而不是所有女士的优先表), rank_of_current, rank_of_chasing是现任排行与追求者排行,将这两者进行比较,如果rank_of_current < rank_of_chasing,则更偏好原对象,相反则更偏向追求者,更新追求者。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值