二分图匹配匈牙利算法

来源:互联网 发布:虚拟屏幕软件 编辑:程序博客网 时间:2024/06/06 02:32
给定一个二分图,结点个数分别为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;}

  

原创粉丝点击