首页 > 代码库 > 二分图匹配匈牙利算法
二分图匹配匈牙利算法
给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数
输入样例#1:
1 1 11 1
输出样例#1:
1
#include<bits/stdc++.h>#define maxn 2999using namespace std;int couple[maxn]; int book[maxn];int Map[maxn][maxn];int n,m,e;int ans=0;bool find(int x){ int i,j; for(j=1;j<=m;j++)//扫描所有的妹子 { if(Map[x][j]&&!book[j]) { book[j]=1; if(couple[j]==0||find(couple[j])) {//没有归属,或者归属可以被抢走 couple[j]=x; return 1; } } } return 0;}int main(){ cin>>n>>m; cin>>e; int from,to; for(int i=1;i<=e;i++) { cin>>from>>to; if(to>m) continue; Map[from][to]=1; } for(int i=1;i<=n;i++) { memset(book,0,sizeof(book)); if(find(i)) ans++ } cout<<ans<<endl; return 0;}
二分图匹配匈牙利算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。