原文链接:http://blog.csdn.net/zxy_snow/article/details/6207840
代码:
int Augement(int n,int x) // n是图节点数的上界
{
int i;
for(i=1; i<=n; i++) // 寻找增广路
if( !used[i] && map[x][i] )
{
used[i] = 1;
if( match[i] == 0 || Augement(n,match[i]) ) // 如果被标记了,就找被标记点是否可以增广
{
match[i] = x;
return 1;
}
}
return 0;
}
int Hungary(int n)
{
int i,sum = 0;
memset(match,0,sizeof(match));
for(i=1; i<=n; i++) // 对每个点进行增广
{
memset(used,0,sizeof(used));
if( Augement(n,i) )
sum++;
}
return sum;
}