二分图最大匹配(匈牙利算法)
2011-05-30 19:55
399 查看
#include<iostream> #include<string.h> using namespace std; const int N = 120; int g ; int linked ;//linked[i] 代表与i连接的顶点 i是right集合中的顶点 linked[i]是left中的顶点 bool visit ; //顶点i是否访问 int n,m; //n的left集合的顶点数 m是right集合的顶点数 bool DFS(int x)//找到x的right中的连接点 { for(int i=0; i<m; i++) //这里标号从零开始 { if(!visit[i] && g[x][i])//i未访问并且x->i { visit[i] = 1; //如果linked[i] (left中元素)没有找到连接点 或找到 linked[i]的连接点 if(linked[i]==-1 || DFS(linked[i]))//找增光轨 { linked[i] = x; return true; } } } return false; } int MaxMatch() { int ans = 0; for(int i=0; i<n; i++) { memset(visit, 0, sizeof(visit)); if(DFS(i)) ans++; } return ans; } int main() { while(scanf("%d",&n)!=EOF) { if(n==0) break; int w,E,x,y;//w是权值 k是二分图中的边数 x y是这个二分图的边连接的俩个顶点 scanf("%d %d",&m, &E); memset(g, 0, sizeof(g)); memset(linked, -1, sizeof(linked)); for(int i=0; i<E; i++) { scanf("%d %d %d",&w, &x, &y);//w 是权 //俩个数都不为0 if(x*y) g[x][y] = 1; //g[x][y] = w; } int ret = MaxMatch(); printf("%d/n",ret); } return 0; }
相关文章推荐
- 二分图最大匹配问题(匈牙利算法)
- 二分图最大匹配——匈牙利算法
- POJ 1469 COURSES(匈牙利算法二分图最大匹配)
- 二分图的最大匹配、完美匹配和匈牙利DFS算法
- 学习匈牙利算法总结(求解二分图最大匹配)
- hihoCoder #1122 : 二分图二•二分图最大匹配之匈牙利算法
- hihoCoder#1122 二分图二•二分图最大匹配之匈牙利算法
- 利用匈牙利算法&Hopcroft-Karp算法解决二分图中的最大二分匹配问题
- HDOJ 2063 过山车【匈牙利算法求二分图最大匹配 DFS增广 BFS增广】
- poj3041_匈牙利算法_二分图最小覆盖点(最大匹配数)
- 二分图最大匹配(匈牙利算法)
- 二分图的最大匹配、完美匹配和匈牙利算法
- hdu 2063 过山车 二分图+最大匹配+匈牙利算法
- 二分图的最大匹配——匈牙利算法
- 二分图最大匹配 匈牙利算法
- 二分图的最大匹配、完美匹配和匈牙利算法
- 51Nod 2006:飞行员配对(二分图最大匹配,匈牙利算法)
- 二分图基数最大匹配 匈牙利算法
- Pku acm 1469 COURSES 数据结构题目解题报告(十一)---- 匈牙利算法求二分图的最大匹配
- 二分图的最大匹配的匈牙利算法