二分图匹配(匈牙利算法DFS实现)
2012-05-01 09:45
288 查看
INIT :g[][] 邻接矩阵
CALL:res=MaxMatch();
时间复杂度为o(VE)
下面是二分图最大匹配的简单题(poj1274的代码),做出邻接矩阵后可以直接调用MaxMatch()函数使用:
CALL:res=MaxMatch();
时间复杂度为o(VE)
下面是二分图最大匹配的简单题(poj1274的代码),做出邻接矩阵后可以直接调用MaxMatch()函数使用:
#include<iostream> #include<cstring> #include<cstdio> using namespace std; const int MAXN=202; 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,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 x,y; while(scanf("%d%d",&uN,&vN)!=EOF) { memset(g,false,sizeof(g));//注意这里每次要初始化 for(int i=0;i<uN;++i) { cin>>x; for(int j=0;j<x;++j) { cin>>y; g[i][y-1]=true; } } cout<<MaxMatch()<<endl; } //system("pause"); return 0; }
相关文章推荐
- 二分图匹配(匈牙利算法DFS实现)
- poj3894 System Engineer 二分图匹配(匈牙利算法的DFS实现)
- HDU1803 Courses(二分图匹配,匈牙利算法,dfs)
- 二分图匹配匈牙利算法(DFS, BFS两种实现模板)
- 二分图-匈牙利算法(dfs实现)
- java实现二分图匹配匈牙利算法(HDU1083)
- HDU2444 The Accomodation of Students(二分图匹配,匈牙利算法,DFS)
- HDU 2063 二分匹配入门 匈牙利算法DFS实现
- 二分图匹配匈牙利算法DFS实现
- POJ1274匈牙利算法DFS实现
- poj2239 Selecting Courses(最大二分图匹配 (匈牙利算法) 实现 )
- ACM_模板_二分图匹配(匈牙利算法)-DFS
- 【二分图匹配】最大匹配-匈牙利算法BFS && DFS写法
- codevs 1922 骑士共存问题||二分图||最大独立集||二分图匹配||Dinic与匈牙利算法的讨论||网络流
- HDU2063 过山车(二分图匹配-匈牙利算法模版题)
- HDU3729 I'm Telling the Truth 匈牙利算法的二分图匹配
- [BZOJ1191][HNOI2006][二分图匹配][匈牙利算法]超级英雄hero
- poj 2446 二分图匹配,匈牙利算法
- hdu 2063 过山车(基础二分图匹配匈牙利算法)
- HDU2819 Swap(二分图匹配匈牙利算法+记录路径)