首页 > 其他 > 详细

二分图查找匹配

时间:2017-08-31 10:27:30      阅读:227      评论:0      收藏:0      [点我收藏+]
#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;
}

 

二分图查找匹配

原文:http://www.cnblogs.com/8023spz/p/7456717.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!