这是一种用增广路求二分图最大匹配的算法。它由匈牙利数学家Edmonds于1965年提出,因而得名。 定义 未盖点:设Vi是图G的一个顶点,如果Vi 不与任意一条属于匹配M的边相关联,就称Vi 是一个未盖点。
交错路:设P是图G的一条路,如果P的任意两条相邻的边一定是一条属于M而另一条不属于M,就称P是一条交错路。
可增广路:两个端点都是未盖点的交错路叫做可增广路。
流程图
伪代码:
- bool
寻找从k出发的对应项出的可增广路 - {
-
while (从邻接表中列举k能关联到顶点j) -
{ -
if (j不在增广路上) -
{ -
把j加入增广路; -
if (j是未盖点 或者 从j的对应项出发有可增广路) -
{ -
修改j的对应项为k; -
则从k的对应项出有可增广路,返回true; -
} -
} -
} -
则从k的对应项出没有可增广路,返回false; - }
-
- void
匈牙利hungary() - {
-
for i->1 to n -
{ -
if (则从i的对应项出有可增广路) -
匹配数++; -
} -
输出 匹配数; - }