1. 程式人生 > 其它 >模板:二分圖匹配(匈牙利演算法的DFS實現)

模板:二分圖匹配(匈牙利演算法的DFS實現)

技術標籤:演算法模板

/* ***************************************************
二分圖匹配(匈牙利演算法的DFS實現)
INIT:G[][]兩邊定點劃分的情況
CALL:res=Hungary();輸出最大匹配數
優點:適於稠密圖,DFS找增廣路快,實現簡潔易於理解
時間複雜度:O(VE);
*************************************************** */
const int MAXN = 510;
int uN,vN;//u,v數目
int G[MAXN][MAXN];//編號是1~n的
int linker[
MAXN]; bool used[MAXN]; bool dfs(int u) { int v; for(v=1;v<=vN;v++){ if(G[u][v]&&!used[v]){ used[v]=true; if(linker[v]==-1||dfs(linker[v])){ linker[v]=u; return true; } } } return false; }
int Hungary() { int res=0; int u; memset(linker,-1,sizeof(linker)); for(u=1;u<=uN;u++){ memset(used,false,sizeof(used)); if(dfs(u)) res++; } return res; }