二分图查找匹配

Posted 给杰瑞一块奶酪~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分图查找匹配相关的知识,希望对你有一定的参考价值。

#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;
}

 

以上是关于二分图查找匹配的主要内容,如果未能解决你的问题,请参考以下文章

求二分图最大匹配——Hopcroft-Krap算法

POJ3189_Steady Cow Assignment(二分图多重匹配/网络流+二分构图)

二分图匹配入门专题1I - Hiding Gold light oj 1152二分图匹配-------------------我是终于不那么水的水题分割线------------------(代码片

二分图

借助二分法匹配时间戳实现快速查找日志内容

二分图匹配(模板)