匈牙利演算法(最大匹配問題)

2021-08-21 19:39:03 字數 1318 閱讀 9251

**

匈牙利演算法:

二分圖的最大匹配可以轉換為乙個網路流的問題,但是我們一般使用匈牙利演算法,這種演算法更易於理解,方便編寫。

介紹這個演算法之前,首先要介紹一些必要的概念。

交錯路 : 從乙個未匹配點出發,依次遍歷未匹配邊、匹配邊、未匹配邊,這樣交替下去,這條路徑稱為交錯路。

增廣路 : 從乙個未匹配點出發,依次遍歷未匹配邊、匹配邊、未匹配邊,這樣交替下去,如果最後乙個點是未匹配點,這條路徑稱為增廣路。換句話說,起點和終點都為未匹配點的交錯路為增廣路(特別提醒,這裡的增廣路和網路流中的增廣路的意義不同)

並且給出hdu 2063當做模板 :

**:

**#include

**#include

**#include******

using

namespace

std;

const

int maxn = 505;

const

int maxm = 1005;

struct edge

;edge edge[maxn];

int head[maxn],tot;

int match[maxn],ans;//match[x] = y表示x的匹配是y

bool incrosspath[maxn];//在交錯路中

int k,m,n;

void init()

void addedge(int u,int v)

bool findpath(int u)}}

return

false;//千萬別忘了這句

}void hungary()

}int main()

hungary();

printf("%d\n",ans);

}return

0;}

另一種**:

**#include

**#include

**#include******

int n,m;

bool line[550][550];

int vis[550],boy[550];

bool find(int x)}}

return

false;

}int main ()

memset(boy,0,sizeof(boy));

sum=0;

for(i=1;i<=m;i++)

printf("%d\n",sum);

}return0;}

強烈推薦,易懂,你值得擁有

最大匹配問題(匈牙利演算法)

結束簡單圖論演算法,撒花 哈哈哈 這時匈牙利演算法就可以當作月老專用演算法 1 先選乙個陣營 2 進行連線,如果有人,這看他的伴侶,能不能換乙個成立,就換 3 以此類推 得最大匹配數 模板一定不要背,理解就可以打出來,不需要硬背,我反正都是理解記憶 int n1,n2 n1表示第乙個集合中的點數,n...

匈牙利演算法 匹配問題

假期 2020.01 27完全匹配 如果乙個匹配中,x y 且匹配數等於 x 則稱此匹配為完全匹配 特別的當 x y 時稱為完美匹配。常見實現步驟 用途 主要用於解決一些與二分圖匹配有關的問題,即部圖匹配最常見的演算法。某公司存在分工問題,一定數量的女員工與男員工搭配,如何搭配才能實現人員的最大利益...

最大匹配 過山車 匈牙利

rpg girls今天和大家一起去遊樂場玩,終於可以坐上夢寐以求的過山車了。可是,過山車的每一排只有兩個座位,而且還有條不成文的規矩,就是每個女生必須找個個男生做partner和她同坐。但是,每個女孩都有各自的想法,舉個例子把,rabbit只願意和xhd或pqk做partner,grass只願意和l...