二分圖:假設G是一個由頂點集合V和邊集合E構成的無向圖,其中V分爲互不相交的A和B,而且E中任何一條邊對應的頂點分別屬於A和B。blog
連通:兩個頂點之間有邊,則二者是連通的。class
匹配邊和匹配點:選擇一條邊,限定該邊跟以前選擇的邊沒有公共節點,這條邊是一個匹配邊,對應的頂點就是匹配點;顯然,一個頂點也只能匹配一次。im
匹配:若干條匹配邊組成一個匹配;顯然一個匹配就是圖G的一個子集。img
最大匹配:一個圖全部的匹配中匹配邊數最大的匹配。集合
完美匹配:圖G中全部的頂點都是匹配點。di
增廣路:從一個未匹配點做爲起點出發,依次走非匹配邊、匹配邊、非匹配邊、匹配邊、非匹配邊……最後或者中間任何一個未匹配點能夠做爲終點,從起點到終點的路叫增廣路。co
增廣路有個特色,就是非匹配邊比匹配邊多一條。所以,任何一個狀態,只要能找到增廣路,交換匹配邊和非匹配邊的身份,變成新的匹配,就比原來的匹配多一條匹配邊。如此迭代,便可找到最大匹配。ps
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
1、A1嘗試匹配B1,成功
2、A2嘗試匹配B2,成功
3、A3嘗試匹配B1,發現B1已經被佔用,則B1嘗試取消跟A1匹配,而後A1嘗試跟B2匹配,發現B2被佔用,則B2嘗試取消跟A2匹配,A2嘗試跟B3匹配,則原來的A1和B2的嘗試以及A3跟B1的嘗試都成功了。能夠看到,該步驟以前的狀態,從A3->B1->A1->B2->A2->B3,就是一條增廣路,改進匹配,就是將原來匹配邊和非匹配邊交換了身份。
4、繼續再也找不到。
男女匹配的例子:
正常狀況下,男孩和女孩是二分圖中的頂點,一條邊表示某個男孩和某個女孩存在潛在戀愛關係,沒有邊的表明不可能會戀愛。規定一我的不能尋找多我的戀愛,若是某個男孩和某個女孩戀愛了二者就是匹配點,之間的邊叫匹配邊。因此問題是,在規定的潛在戀愛關係圖中,如何分配使得儘量多的情侶。