稳定匹配问题之三国
首先,我们先看看问题:
有n个男人和n个女人(n>=2),每个男人对所有女人有一个好感度排名,每个女人对所有男人也有一个好感度排名。将男女两两配对,得到n对男女,称之为一个完美匹配。如果有一组男女A和B,他们在匹配中没有被配对,且对对方的好感度均大于对现有配偶的好感度(男人A觉得女人B好过现在的妻子C,女人B觉得A好过现在的丈夫D),则称之为一个不稳定配对。如果一个完美匹配中没有不稳定配对,则称改匹配为一个稳定匹配。
|
左图是男对女的好感度,右图是女对男的好感度
思路:
首先,拿到这个题,一次性写出是不现实的,也就是说,这其实也就是一个不断尝试的过程,也就是说,我们匹配之后,需要对已经匹配的序列确保排序没有问题,达到稳定匹配,当然想选择和自己最喜欢的人在一起了,但是,最为上帝,得考虑到全局,也就是说大家尽量都是彼此更爱的人,没有一个你爱的人他身边的人更爱的你身边的人,你身边的人更爱他身边的人。哈哈哈哈,有点绕了。但是我们的目的也就是找出一个稳定匹配。
#include<stdio.h>
#include<stdlib.h>
#define num 5
int m[num][num]={
{
0,1,2,4,3},{
0,2,1,3,4},{
4,0,2,1,3},{
2,1,3,0,4},{
2,0,1,3,4}};
//男生对女生的偏爱程度
int w[num][num]={
{
4,0,1,3,2},{
3,1,2