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

来源:互联网 发布:c语言程序编程软件 编辑:程序博客网 时间:2024/05/20 10:56


例子就以sicnuoj的题,http://acm-sicnu.com/problem/32/ 

#include <iostream>#include <cstdio>#include <cstring>using namespace std;int match[200][400] = {0};int lib[400] = {0}, used[400] = {0};int n, m, no, sum = 0;int find(int x){    int i;    for(i = 1; i <= m; i++)    {        if(match[x][i] == 1 && used[i] == 0)        {            used[i] = 1;            if(lib[i] == 0 || find(lib[i]))            {                lib[i] = x;                return 1;            }        }    }    return 0;}int main(){    cin >> n >> m;    for(int i = 1; i <= n; i++)    {        int k;        cin >> k;        for(int j = 1; j <= k; j++)        {            cin >> no;            match[i][no] = 1;        }    }    for(int i = 1; i <= n; i++)    {        memset(used, 0, sizeof(used));        if(find(i)) sum++;    }    printf("%d\n", sum);    return 0;}





0 0