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