码迷,mamicode.com
首页 > 其他好文 > 详细

二分图的最大匹配、带权最大匹配

时间:2014-07-31 09:41:15      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   art   

给定一个二分图G,M为G边集的一个子集,如果M满足当中的任意两条边都不依附于同一个顶点,则称M是一个匹配。

 

Reference:google上搜"ByVoid 二分图"(被墙了T^T)

计算二分图的最大匹配:匈牙利算法

模板:

bubuko.com,布布扣
#include <stdio.h>
#include <string.h>
#define MAX 102

long n,n1,match;
long adjl[MAX][MAX];
long mat[MAX];
bool used[MAX];

FILE *fi,*fo;

void readfile()
{
    fi=fopen("flyer.in","r");
    fo=fopen("flyer.out","w");
    fscanf(fi,"%ld%ld",&n,&n1);
    long a,b;
    while (fscanf(fi,"%ld%ld",&a,&b)!=EOF)
        adjl[a][ ++adjl[a][0] ]=b;
    match=0;
}

bool crosspath(long k)
{
    for (long i=1;i<=adjl[k][0];i++)
    {
        long j=adjl[k][i];
        if (!used[j])
        {
            used[j]=true;
            if (mat[j]==0 || crosspath(mat[j]))
            {
                mat[j]=k;
                return true;
            }
        }
    }
    return false;
}

void hungary()
{
    for (long i=1;i<=n1;i++)
    {
        if (crosspath(i))
            match++;
        memset(used,0,sizeof(used));
    }
}

void print()
{
    fprintf(fo,"%ld",match);
    fclose(fi);
    fclose(fo);
}

int main()
{
    readfile();
    hungary();
    print();
    return 0;
}
View Code

 

求带权最大匹配(边上有权值):KM算法

 

二分图的最大匹配、带权最大匹配,布布扣,bubuko.com

二分图的最大匹配、带权最大匹配

标签:style   blog   http   color   os   io   for   art   

原文地址:http://www.cnblogs.com/pdev/p/3879954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!