匈牙利算法求最大匹配的代码实现
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#define mem(a) memset(a, 0, sizeof(a))
#define maxn 105
Using namespace std;
Int vis[maxn], map[maxn][maxn], lk[maxn], n;
Bool dfs(int a)
{
Int i;
For(i = 0;i < n;i++)
{
If(!vis[i]&&map[a][i])
{
Vis[i] = 1;
If(lk[i] == -1||dfs(lk[i]))
{
Lk[i] = a;
Return true;
}
}
}
Return false;
}
Int main()
{
Int m, i, j, k, res = 0;
Mem(vis);
Mem(map);
Memset(lk, -1, sizeof(lk));
Scanf(“%d%d”,&n, &m);
For(i = 0;i < m;i++)
{
Scanf(“%d%d”, &j, &k);
Map[j][k] = 1;
}
For(i = 0;i < n;i++)
{
Mem(vis);
If(dfs(i))
Res++;
}
Printf(“%d\n”, res);
Return 0;
}

本文详细介绍了使用匈牙利算法解决最大匹配问题的代码实现过程,包括算法原理、代码细节和应用实例。算法适用于解决在有限集合上的最大匹配问题,如在图论中的边集匹配。
3464

被折叠的 条评论
为什么被折叠?



