Problem Description
过山车的每一排只有两个座位,每个女生必须找个男生做partner和她同坐,每个女生都愿意跟若干男生做partner。只让找到partner的人去坐过山车,最多有多少对组合可以坐上过山车?
Input
输入数据的第一行是三个整数K , M , N,分别表示可能的组合数目,女生的人数,男生的人数。0<K<=1000
1<=N 和M<=500.接下来的K行,每行有两个数,分别表示女生Ai愿意和男生Bj做partner。最后一个0结束输入。
Output
对于每组数据,输出一个整数,表示可以坐上过山车的最多组合数。
【2018/11/7】
1、这篇博客讲的生动形象:超级详细讲解匈牙利算法
因为一开始关于visit数组我没看懂,所以在这里再补充几句:
算法思路是:让每一个女生独自寻找男生,如果找到了,那么组合数+1
寻找过程的代码如下:
//女生x来寻找partner
bool find(int x)
{
//遍历每一个男生i
for(int i=0; i<n; i++)
{
//若女生x未找过男生i
//且女生x愿意和男生i做partner
if(!visit[i]&&map[x][i])
{
//记录男生i被找过