二分匹配之匈牙利演算法
一、概念
二分圖:把點分為兩個集合,在同乙個集合的點之間不能有邊,也就是說邊只能存在於分別來自兩個集合的點間,這樣的圖就是二分圖。
最大二分匹配:在原二分圖上通過刪除一些邊,來保證每個點只能與乙個點相連(一一對應),能保留最多的邊數,這個邊數就是最大二分匹配
二、演算法步驟
1)初始化,存圖。
2)選定其中乙個集合,依次對集合中的每個點dfs搜尋增廣路,成功搜到即匹配數加一,搜尋的過程中也對前面的進行了更新。(最後的m圖就是最大二分匹配圖,搜尋過程每搜尋一次,m圖的邊數加1)。 三、
具體分析
這裡的增廣路概念:
1、以非m圖中的點出發,到非m圖中的點結束。 2、
所經過的邊,交替是m圖中的邊(第一條邊不屬於m圖,第二條屬於,第三條不屬於,......)
*m圖:初始化m圖為空,(所以第一次搜尋產生的增廣路就是一條邊),每次搜尋後產生的增廣路與舊m圖做異或操作(有相同重複的邊就去掉) 就是新的m圖。 四、
匹配順序
有些圖不止乙個最大二分匹配圖,所以可能會對輸出有要求。
1)鄰接表存的圖,所以從先建立連線的點開始讀取,搜尋。
2)後面的搜尋會有更新,所以先建立連線的點一般不是最後的點。
處理:建立鄰接表之前先排序。改變搜尋增廣路的順序。
例項,**後續再補......
二分匹配 匈牙利演算法
這個演算法真心很精妙,其實 很簡單,但是理解其中的奧秘還真要花點時間 matrix67大牛說的好 說穿了,就是你從二分圖中找出一條路徑來,讓路徑的起點和終點都是還沒有匹配過的點,並且路徑經過的連線是一條沒被匹配 一條已經匹配過,再下一條又沒匹配這樣交替地出現。找到這樣的路徑後,顯然路徑裡沒被匹配的連...
二分匹配 匈牙利演算法
奆佬的部落格 匈牙利演算法是由匈牙利數學家edmonds於1965年提出,因而得名。匈牙利演算法是基於hall定理中充分性證明的思想,它是部圖匹配最常見的演算法,該演算法的核心就是尋找增廣路徑,它是一種用增廣路徑求二分圖最大匹配的演算法。等等,看得頭大?那麼請看下面的版本 通過數代人的努力,你終於趕...
二分匹配 匈牙利演算法模板 過山車
description rpg girls今天和大家一起去遊樂場玩,終於可以坐上夢寐以求的過山車了。可是,過山車的每一排只有兩個座位,而且還有條不成文的規矩,就是每個女生必須找個個男生做partner和她同坐。但是,每個女孩都有各自的想法,舉個例子把,rabbit只願意和xhd或pqk做partne...