匈牙利算法示例

来源:互联网 发布:it管培生 编辑:程序博客网 时间:2024/06/05 08:59
#include <stdio.h>#include <string.h>int N,M;int map[201][201];int pair[201],visit[201];int num;int dfs(int v){    int i;    if(visit[v] == 0)    {        visit[v] = 1;        for(i = 1; i <= N; i++)        {            if(map[v][i] == 1)            {                if(pair[i] == 0 || dfs(pair[i]) == 1)                {                    pair[i] = v;                    return 1;                }            }        }    }    return 0;}int main(void){    int tc, T,K,i,j,tmp;    //freopen("input.txt", "r", stdin);    setbuf(stdout, NULL);    scanf("%d", &T);    for(tc = 0; tc < T; tc++)    {        num = 0;        memset(map, 0, sizeof(map));        memset(pair, 0, sizeof(pair));        scanf("%d %d", &N, &M);        if(M == 0)            scanf("%d", &M);        for(i = 1; i <=M; i++)        {            scanf("%d", &K);            for(j = 1; j <= K; j++)            {                scanf("%d", &tmp);                map[i][tmp] = 1;            }        }        for(i = 1; i <= M; i++)        {            memset(visit, 0, sizeof(visit));            if(dfs(i) == 1)                num++;        }        printf("%d\n", num);    }    return 0;//Your program should return 0 on normal termination.}
0 0
原创粉丝点击