日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二分图-匈牙利算法模板

發布時間:2025/7/25 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二分图-匈牙利算法模板 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二分圖就不贅述了,我在知識資料整理有相關資料。

.最大匹配 ?.最小路徑覆蓋 ?.最小點覆蓋 ?.最大獨立集

最大匹配:二分圖中邊集最大的那個匹配

最小路徑(邊)覆蓋:用盡量小的不想交簡單路徑覆蓋有向無環圖(DAG)G的所有頂點

最小頂點(點)覆蓋:用最少的點,讓每條邊都至少和其中一個點關聯

最大獨立集:在N個點的圖中選出m個點,使這m個點兩兩之間沒有邊的點中,m的最大值

?

二分圖匹配模型,二分圖有如下幾種常見變形:

1.二分圖的最小頂點覆蓋

最小頂點覆蓋要求用最少的點(x或y中的都行),讓每條邊都至少和其中一個點關聯

knoig定理:二分圖中最小頂點覆蓋等于最大匹配數

?

2.DAG圖中的最小路徑覆蓋

用盡量少的不相交簡單路徑覆蓋DAG的所有頂點,這就是DAG圖的最小路徑覆蓋問題

結論:DAG圖中的最小路徑覆蓋數 = 節點數(n)-最大匹配數(m)

?

3.二分圖的最大獨立集

最大獨立問題:在n個點的圖G中選出m個點,使這m個點兩兩之間沒有邊,求m的最大值

結論:二分圖的最大獨立集數 = 節點數(n)-最大匹配數(m)

?

有一種很經典的二分圖模型,在一個n*n的矩陣中,這個矩陣里面有k個障礙物,你擁有一把武器,一發彈藥一次能消滅一行或者一列的障礙物,求消滅全部障礙物所需的最少彈藥數。

可以這樣考慮:我們以所有行為二分圖的左頂點,所有的列為右頂點,那么如果位于坐標p(x,y)有障礙物,我們就連一條邊,然后我們只需要最少的頂點覆蓋所有的邊即可。這樣就是二分圖的最小頂點覆蓋問題了,我們又知道最大小頂點等于二分圖最大匹配。

?

?

時間復雜度: 鄰接矩陣:?O(n3)
鄰接表: O(nm) 空間復雜度: 鄰接矩陣:?O(n2)
鄰接表:O(n+m)

?

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

?

?

?

?

?

轉載于:https://www.cnblogs.com/Roni-i/p/7475175.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的二分图-匈牙利算法模板的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。