匈牙利算法求最大匹配的代码实现
#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;
}
原文:http://blog.csdn.net/nndxnm/article/details/44545481