二分图查找匹配

#include <bits/stdc++.h>

#define MAX 505

using namespace std;

int book[MAX],match[MAX];
int n,m,sum,a,b;
int e[MAX][MAX];

int dfs(int u)
{
    for(int i=1;i<=n;i++)
    {
        if(!book[i]&&e[u][i])
        {
            book[i]=1;
            if(match[i]==0||dfs(match[i]))//这个点未被匹配或者与他匹配的点可以有新的匹配 此时表示多了一个匹配
            {
                match[i]=u;
                match[u]=i;
                return 1;
            }
        }
    }
    return 0;
}
int main()
{
    cin>>n>>m;
    for(int i=0;i<m;i++)
    {
        cin>>a>>b;
        e[a][b]=e[b][a]=1;
    }
    for(int i=1;i<=n;i++)
    {
        memset(book,0,sizeof(book));//重新进行访问了 book归0
        if(dfs(i))sum++;
    }
    cout<<sum;
}
原文地址:https://www.cnblogs.com/8023spz/p/7456717.html