Unverified Commit 6a444ed9 authored by 折耳泽尔w's avatar 折耳泽尔w Committed by GitHub
Browse files

Update bi-graph.md

parent 3db37e6c
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@

算法步骤大致如下:

1.首先从任意一个未配对的点$u$开始,选择他的任意一条边($u$-$v$),如此时$v$还未配对,则配对成功,配对数加一,若$v$已经配对,则尝试寻找$v$的配对的另一个配对(该步骤可能会被递归的被执行多次),若该尝试成功,则配对成功,配对数加一。
1.首先从任意一个未配对的点$u$开始,选择他的任意一条边($u$-$v$),如此时$v$还未配对,则配对成功,配对数加一,若$v$已经配对,则尝试寻找$v$的配对的另一个配对(该步骤可能会被递归的被执行多次),若该尝试成功,则配对成功,配对数加一。

2.若果上一步配对不成功,那么选择重新选择一条未被选择过的边,重复上一步。

@@ -62,10 +62,10 @@

![](./images/bi-graph-2.png)

接下来对节点3尝试匹配,选择边(3-4),但发现4已经有匹配了,我们尝试寻找4的匹配的其他匹配,1的其他匹配。
这个匹配显然只能从未被选择的边里找(灰色的),我们可以遍历1的所有边,寻找未被选择的,我们很容易找到边(1-5)。
接下来对节点3尝试匹配,选择边(3-4),但发现4已经有匹配了,我们尝试寻找4的匹配的其他匹配,1的其他匹配。
这个匹配显然只能从未被选择的边里找(灰色的),我们可以遍历1的所有边,寻找未被选择的,很容易找到边(1-5)。

我们发现5已经被匹配了,所以我们尝试寻找5的匹配的其他匹配,即2的其他匹配。类似的,我们可以找到6。
我们发现5已经被匹配了,所以我们尝试寻找5的匹配的其他匹配,即2的其他匹配。类似的,可以找到6。

![](./images/bi-graph-3.png)

@@ -73,7 +73,7 @@

![](./images/bi-graph-4.png)

我们可以发现,当我们尝试对节点3进行匹配时,我们走过了一条路径(3-4-1-5-2-6),最后找到了新的匹配方案,我们把这样的道路叫做**增广路**,其本质是一条起点和终点都是未匹配节点的路径。
可以发现,当尝试对节点3进行匹配时,走过了一条路径(3-4-1-5-2-6),最后找到了新的匹配方案,我们把这样的道路叫做**增广路**,其本质是一条起点和终点都是未匹配节点的路径。

匈牙利算法执行的过程也可以看作是不断寻找增广路的过程,当在当前匹配方案下再也找不到增广路,那么当前匹配方案便是最大匹配了。