二分圖——匈牙利算法簡述
阿新 • • 發佈:2018-09-03
bsp 復習 昨天 目標 一個 之間 color ret pre
昨天模擬,有一道高維宇宙,二分圖匹配是正解,但是二分圖匹配有點忘了,復習一下。
二分圖匹配其實就是兩個集合有一些元素可以匹配,試圖找到最多匹配的一種情況。
二分圖中的兩個可以連得邊用數組來實現。
每一個元素找可以連得邊,如果想要匹配的點已經被人占了,就讓前面的與目標點匹配的點找另一個可以匹配的點,這樣就可以把盡量多的點連起來。
具體代碼如下:
1 bool find(ll x)
2 {
3 for(int i=1; i<=numb; i++)//遍歷所有另一集合中的點
4 {
5 if(vis[i] == 0 and mp[x][i])//如果另一集合中的點沒被遍歷過,並且兩個點之間可以匹配
6 {
7 vis[i] = 1;//標記
8 if(pri[i] == 0 || find(pri[i]))//如果目標匹配點沒有進行匹配,或者已經匹配的點可以換其他點匹配
9 {
10 pri[i] = x;
11 return true;
12 }
13 }
14 }
15 return false;
16 }
註意在主函數中遍歷集合中的元素每次在find下一個元素前要把vis數組清零。
例題:高維宇宙,矩陣遊戲
二分圖——匈牙利算法簡述