代码实现:
constintINF = 0x3f3f3f3f;
constintMAXN=510;
intuN,vN;//u,v数目
intg[MAXN][MAXN];//构图
intlink[MAXN]; //link[v]=u表示右边对左边的匹配
boolused[MAXN];//是否访问过
booldfs(intu)//从左边开始找增广路径
{
intv;
for(v=0;v<vN;v++)//右边顶点编号从0开始
{
if(g[u][v]&&!used[v]) //如果存在通路,且从u开始搜索时该点没访问过
{
used[v]=true;
if(link[v]==-1 || dfs(link[v])) //找增广路
{
link[v]=u;
returntrue;
}
}
}
returnfalse;
}
inthungary()
{
intres=0;
inti,u;
memset(link,-1,sizeof(link));
for(u=0;u<uN;u++)
{
memset(used,0,sizeof(used));
if(dfs(u))
res++;
}
returnres;
}
--------------------------------------
以上是匈牙利算法的关键代码
其实实现就是一个找增广路径的过程
增广路径 字面意思就是把路径越增越广