您的位置:首页 > 其它

匈牙利算法(二分图模板)

2013-08-21 10:02 363 查看
匈牙利算法:

 

#define N 1111
int vx,vy;   ///二分图的顶点集合
int graph

;   ///邻接矩阵
int link
;   ///标记vy中的点在vx中的编号
bool vis
;   ///标记vy的点是否访问过

bool dfs(int u){   ///增广路搜索
for(int j=1;j<=vy;j++)
{
if(graph[u][j] && !vis[j])   ///u到j有边且未被访问过
{
vis[j]=true;   ///标记已访问过
if(link[j]==-1 || dfs(link[j]))   ///若不属于前一个匹配或者被j匹配到的点可以找到增广路
{
link[j]=u;   ///更新匹配
return true;   ///返回匹配成功的标志
}
}
}
return false;   ///继续找下一个点
}

int hungary(){   ///匈牙利算法
int Max_match=0;   ///最大匹配数初始化为0
for(int i=1;i<=vx;i++)
{
memset(vis,false,sizeof(vis));   ///清空上次搜索的标记
if(dfs(i))   ///从1开始搜到vx
Max_match++;   ///若找到则匹配数加一
}
return Max_match;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  模板