演算法學習之路|二分圖的最大匹配—匈牙利演算法(Dfs實現)
二分圖的概念:二分圖又稱作二部圖,是圖論中的一種特殊模型。 設G=(V,E)是一個無向圖,如果頂點V可分割為兩個互不相交的子集(A,B),並且圖中的每條邊(i,j)所關聯的兩個頂點i和j分別屬於這兩個不同的頂點集(i in A,j in B),則稱圖G為一個二分圖。
匹配:在圖論中,一個匹配是一個邊的集合,其中任意兩條邊都沒有公共頂點。
最大匹配:一個圖所有匹配中,所含匹配邊數最多的匹配,稱為這個圖的最大匹配。
交替路:從一個未匹配點出發,依次經過非匹配邊、匹配邊、非匹配邊…形成的路徑叫交替路。
增廣路:從一個未匹配點出發,走交替路,如果途徑另一個未匹配點,則這條交替路稱為增廣路。
增廣路有個重要特點就是:未匹配邊數比匹配邊數多一,這樣就可以讓未匹配邊和匹配邊身份交換使得匹配邊數加一,所以一直尋找增廣路來增加匹配數,直到找不到增光路為止。
程式碼實現(Dfs):
struct Edge
{
int from;
int to;
};
vector <int> G[max];//儲存i點的出發點編號
int matchingnode[max];
int check[max];
int Dfs(int u)
{
vector <int>::iterator it;
for(it=G[u].begin();it!=G[u].end();it++)
{
int v=*it;
if(!check[v])//判斷是否在交替路中
{
check[v]=1;
if(matchingnode[v]==-1||Dfs(matchingnode[v]))//是否是匹配點
{
matching[v]=u;
matching[u]=v;
return 1;
}
}
}
return 0;
}
int hungarian ()
{
int _count;
memset(matchingnode,-1,sizeof(matchingnode));
for(int i=0;i<max;i++)
{
if(matchingnode[i]==-1)
{
memset(check,0,sizeof(check));
if(Dfs(i))
_count++;
}
}
return _count;
}
相關文章
- 二分圖最大匹配(匈牙利演算法)演算法
- 匈牙利演算法--二分圖的最大匹配演算法
- 二分圖的最大匹配(匈牙利演算法)程式碼演算法
- 圖論-二分圖匹配匈牙利演算法圖論演算法
- 對匈牙利演算法理解——對二分圖進行最大匹配的演算法演算法
- 求二部圖最大匹配的匈牙利演算法演算法
- 詳解匈牙利演算法與二分圖匹配演算法
- 目標匹配:匈牙利演算法的python實現演算法Python
- 匈牙利演算法模板(二分圖)演算法
- POJ 3014:Asteroids(二分匹配,匈牙利演算法)AST演算法
- 《啊哈!演算法》我要做月老 ——二分圖最大匹配演算法
- 匈牙利演算法學習筆記演算法筆記
- 二分圖最大權完美匹配
- 【UOJ78】二分圖最大匹配
- (最大流,二分圖的多重匹配) Magic Potion
- 二分圖最小點覆蓋等於二分圖最大匹配
- 圖解KMP字串匹配演算法+程式碼實現圖解KMP字串匹配演算法
- 二分搜尋演算法的實現演算法
- 深度DFS 和 廣度BFS搜尋演算法學習演算法
- 二分圖匹配
- Java實現二分查詢演算法Java演算法
- 雙向最大匹配演算法——基於詞典規則的中文分詞(Java實現)演算法中文分詞Java
- 圖解BM(Boyer-Moore)字串匹配演算法+程式碼實現圖解字串匹配演算法
- DFS演算法原理演算法
- 強化學習之路一 QLearning 演算法強化學習演算法
- 使用lap.lapjv實現線性分配(我主要用來作為匈牙利演算法的實現)演算法
- 關於二分圖上的最大匹配、最小點覆蓋、最大獨立集以及最大權閉合子圖的聯絡
- JAVA圖搜尋演算法之DFS-BFSJava演算法
- Unity實現A*尋路演算法學習2.0Unity演算法
- 演算法學習?挑戰高薪的必經之路!讓面試官滿意的排序演算法(圖文解析)演算法高薪面試排序
- 圖論與圖學習(二):圖演算法圖論演算法
- 洛谷P7368 [USACO05NOV] Asteroids G 題解 二分圖最小點覆蓋 匈牙利演算法AST演算法
- 重學資料結構和演算法(三)之遞迴、二分、字串匹配資料結構演算法遞迴字串匹配
- 《演算法圖解》學習記錄演算法圖解
- 小白機器學習基礎演算法學習必經之路(下)機器學習演算法
- 單模式匹配 KMP 演算法 簡易版學習筆記模式KMP演算法筆記
- LeetCode演算法練習——深度優先搜尋 DFSLeetCode演算法
- 聊聊演算法——BFS和DFS演算法
- HDU 2063 雲霄飛車(匈牙利演算法)演算法