舞伴问题

假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。要求编写程序实现舞伴问题。
Description
输入一共5行,
第一行是男生人数m;
第二行依次是男生的姓名;
第三行是女士的人数n;
第四行依次是女士的姓名;
第五行是跳舞的轮数。
Input
配对的男士和女士的姓名。
配对的男士和女士的姓名。
Output

5
A B C D E
3
F G H
2
Sample Input

B G
这个题也蛮坑的==, 试了好几次才读懂什么意思,就是求最后一轮跳舞的一对人是谁,每一轮男女分别只能上一个人,这个题目描述也是醉
#include<iostream>
#include<string>
#include<cstdlib>
#include<list>
#include<stack>
#include<queue>
#include<stdio.h>
using namespace std;

int main()
{
	int man_n;
	while (cin >> man_n)
	{
		string p;
		queue<string>man;
		for (int i = 0; i < man_n; i++)
		{
			cin >> p;
			man.push(p);
		}
		int woman_n;
		cin >> woman_n;
		queue<string>woman;
		for (int i = 0; i < woman_n; i++)
		{
			cin >> p;
			woman.push(p);
		}
		int time;
		cin >> time;

		int temp;
		man_n > woman_n ? temp = woman_n : temp = man_n;
		
			for (int j = 1; j < time; j++)
			{
				string now_man = man.front();
				string now_woman = woman.front();
				man.pop();
				woman.pop();
				man.push(now_man);
				woman.push(now_woman);
			}
		

		string nman = man.front();
		string nw = woman.front();

		cout << nman << ' ' << nw;

	}
	return 0;
}
//by swust_t_p
舞伴问题是一个稳定匹配问题,也被称为Gale-Shapley算法。它是一个经典的算法,用于解决两组人之间的配对问题,其中每个人都有自己的偏好列表。算法的目标是找到一个稳定的匹配,即不存在任何一对人,他们更喜欢彼此而不是他们当前的配对。 以下是一个用Python演示舞伴问题的例子: ```python def stable_matching(men, women): # 创建一个字典,用于存储每个人的当前配对 engaged = {} # 创建一个字典,用于存储每个人的偏好列表 preferences = {} # 创建一个队列,用于存储未匹配的男性 free_men = [] # 初始化未匹配的男性队列和偏好列表 for man in men: free_men.append(man) preferences[man] = women[man] # 开始匹配过程 while free_men: man = free_men[0] woman = preferences[man][0] # 如果女性没有配对,直接匹配 if woman not in engaged: engaged[woman] = man free_men.pop(0) else: current_man = engaged[woman] # 如果女性更喜欢当前的配对,继续匹配下一个男性 if preferences[woman].index(man) < preferences[woman].index(current_man): free_men.pop(0) free_men.append(current_man) engaged[woman] = man # 更新男性的偏好列表 preferences[man] = preferences[man][1:] return engaged men = ['Tom', 'John', 'Mike'] women = {'Tom': ['Mary', 'Jane', 'Lisa'], 'John': ['Jane', 'Mary', 'Lisa'], 'Mike': ['Lisa', 'Mary', 'Jane']} result = stable_matching(men, women) print(result) ``` 输出结果为: ``` {'Mary': 'Tom', 'Jane': 'John', 'Lisa': 'Mike'} ``` 这表示Mary与Tom匹配,Jane与John匹配,Lisa与Mike匹配。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值