二分图最大匹配(匈牙利算法)
2009-07-27 21:29
661 查看
招聘网站评价
算法轮廓:
(1)置M为空
(2)找出一条增广路径P,通过取反操作获得更大的匹配M’代替M
(3)重复(2)操作直到找不出增广路径为止
V2:
算法轮廓:
(1)置M为空
(2)找出一条增广路径P,通过取反操作获得更大的匹配M’代替M
(3)重复(2)操作直到找不出增广路径为止
V2:
#include < iostream > #include < fstream > using namespace std; const int MAXN = 100 ; int uN, vN; // u,v数目 bool g[MAXN][MAXN]; // g[i][j] 表示 xi与yj相连 int xM[MAXN], yM[MAXN]; // 输出量 bool chk[MAXN]; // 辅助量 检查某轮 y[v]是否被check bool SearchPath( int u) { int v; for (v = 0 ; v < vN; v ++ ) { if (g[u][v] && ! chk[v]) { chk[v] = true ; if (yM[v] == - 1 || SearchPath(yM[v])) { yM[v] = u; xM[u] = v; return true ; } } } return false ; } int MaxMatch() { int u; int ret = 0 ; memset(xM, - 1 , sizeof (xM)); memset(yM, - 1 , sizeof (yM)); for (u = 0 ; u < uN; u ++ ) { if (xM[u] == - 1 ) { memset(chk, false , sizeof (chk)); if (SearchPath(u)) ret ++ ; } } return ret; } int main() { int i, k; int tU, tV; ifstream cin( " test.txt " ); cin >> uN >> vN >> k; memset(g, false , sizeof (g)); for (i = 0 ; i < k; i ++ ) { cin >> tU >> tV; g[tU][tV] = true ; } int M = MaxMatch(); cout << " Total Match: " << M << endl; for (i = 0 ; i < MAXN; i ++ ) if (xM[i] != - 1 ) cout << i << ' ' << xM[i] << endl; system( " pause " ); return 0 ; } /**/ /* ********** test data: 3 3 3 1 1 1 0 2 2 ********** */
相关文章推荐
- 它处资料:二分图最大匹配的匈牙利算法
- 透彻解析二分图最大匹配匈牙利算法模板
- 学习匈牙利算法总结(求解二分图最大匹配)
- 二分图的最大匹配、完美匹配和匈牙利算法
- 二分图最大匹配之匈牙利算法
- 关于二分图最大匹配--匈牙利算法的理解
- 二分图的最大匹配、完美匹配和匈牙利算法
- poj3020 二分图最大匹配(匈牙利算法)
- 匈牙利算法求二分图的最大匹配
- poj3041 Asteroids 匈牙利算法 最小点集覆盖问题=二分图最大匹配
- 二分图的最大匹配(匈牙利算法)HDU1083
- 二分图最大匹配--匈牙利算法
- 51Nod 2006 飞行员配对(二分图最大匹配)-匈牙利算法
- HDU 2063 过山车(二分图最大匹配问题,匈牙利算法)
- poj3041_匈牙利算法_二分图最小覆盖点(最大匹配数)
- 二分图的最大匹配_匈牙利算法
- 二分图的最大匹配——匈牙利算法
- 二分图的最大匹配————匈牙利算法(hungary)基础详解。
- 二分图最大匹配-匈牙利算法
- 匈牙利算法求二分图的最大匹配/匈牙利算法模板