首页 > 代码库 > 二分图匹配匈牙利算法

二分图匹配匈牙利算法

给定一个二分图,结点个数分别为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;}

  

二分图匹配匈牙利算法