杭电2063二分图匹配(匈牙利算法)

题意:
有n个女生和m个男生去,做过山车,女生可以选择和哪个男生一起,可以有多个意向,但最终一个妹子只能和一个男的一起,问最多能有多少组匹配成功
这题是二分图匹配,用匈牙利算法,第一次接触到,上网搜到相关资料才A过了
每找到一次增广路,都可以是匹配数+1,不断搜寻至没有增广路了则得到最大匹配数

#include

#include
#include
using namespace std;
int map[600][600];
int n,m;
int visit[600];
int pp[600];
int solve(int a)
{
    int i;
    for(i=1; i<=m; i++)//开始搜寻对应男生
        if(!visit[i]&&map[a][i])//如果i不在增广路上
        {
            visit[i]=1;
            if(!pp[i]||solve(pp[i]))//如果没有匹配过或者能寻找到增广路
            {
                pp[i]=a;
                return 1;
            }
        }
    return 0;
}
int main()
{
    int t;
    //freopen("E:\\in.txt","r",stdin);
    while(cin>>t&&t)
    {
        cin>>n>>m;
        memset(map,0,sizeof(map));
        memset(pp,0,sizeof(pp));
        int ans=0;
        while(t--)
        {
            int a,b;
            cin>>a>>b;
            map[a][b]=1;
        }
        for(int i=1; i<=n; i++)//从女生开始搜寻
        {
            memset(visit,0,sizeof(visit));
            if(solve(i))//寻找增广路
                ans++;
        }
        cout<     }


    return 0;
}

你可能感兴趣的:(二分图匹配,匈牙利算法,hdu2063,二分图匹配,匈牙利算法)