Conseguir algoritmo húngaro

La mayoría se refiere a esta disposición el blog https://blog.csdn.net/qq_37230495/article/details/88554607
sólo soy yo para este código de acuerdo con sus propias ideas para explicar, por referencia.

#include<stdio.h>
#include<string.h>
#define MAX 100
int n,m;
bool line[MAX][MAX];//这个代表男生和女生的连线程度
bool used[MAX];//这个代表该女生是否被访问过
int girl[MAX];//这个代表该女生对应的男生是哪一个
bool find(int x)
{
	for(int j=1;j<=m;j++)//扫描每一个妹子 
		if(line[x][j]==true&&used[j]==false)
		//如果有暧昧关系,并且没有被标记过
		{
			used[j]=true;//以便于递归的时候,知道这个妹子被看中过。(懂了) 
			if(girl[j]==0||find(girl[j]))
			//名花无主或者能挪出个位置来(也就是那个男生对应的女生有其他的),这里使用递归 
			{
				girl[j]=x;
				return true;
			}
		} 
		return false;
}
int main() 
{
	int cnt=0;
	printf("请分别输入男生和女生的数量:"); 
	scanf("%d %d",&n,&m);
	int t;//有t对暧昧关系 
	printf("请输入有几对暧昧关系:");
	scanf("%d",&t);
	printf("请输入%d对暧昧关系:\n",t);
	int x,y;
	memset(line,false,sizeof(line));
	memset(girl,0,sizeof(girl));//初始化girl没有和任何人配对 
	for(int i=0;i<t;i++)
	{
		scanf("%d %d",&x,&y);
		line[x][y]=true;
	}
	for(int i=1;i<=n;i++)
	{
		memset(used,false,sizeof(used));
		if(find(i))
			cnt++;
	}
	printf("最大匹配数为:%d\n",cnt);
}
Publicado 72 artículos originales · ganado elogios 5 · Vistas 2796

Supongo que te gusta

Origin blog.csdn.net/qq_41115379/article/details/105005721
Recomendado
Clasificación