Gale-Shapley Algorithm
此算法的流程如下:
首先搞一个队列,存储未匹配的男士编号。每次取出一个未匹配的男士的编号,让他向其未求过婚的且最喜欢的女士求婚,如果对应女士没有匹配或者已经匹配的没有这位优,那么将这位与对应的女士相匹配,并且将原来已匹配的男士扔到队列里,一直重复上述步骤直到队列为空
可以证明,上述流程结束后,每位男士必定有配偶,且婚姻是稳定的
例题
1.UVA1175 Ladies' Choice
最简单的板子,直接上代码,抄的大刘的
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
2.矩阵变换
不知道是怎么发现的一个性质
对于一行,它更喜欢这一行靠前的数
对于一个数,它更喜欢它的位置靠后的行
然后就转化为一个稳定婚姻问题了
关于上面的那条性质,这是一个例子:
0 1 0 2
1 0 2 0
行\(1\)喜欢的数的顺序:\(1\ 2\)
行\(2\)喜欢的数的顺序:\(1\ 2\)
数\(1\)对于行的喜欢顺序:\(1\ 2\)
数\(2\)对于行的喜欢顺序:\(1\ 2\)
如果行\(1\)和数\(2\)配对的话,就会出现行\(1\)更喜欢数\(1\)且数\(1\)更喜欢行\(1\)的情况,不合法,稳定婚姻算法可以避免这种情况的出现
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include