poj3041题解

来源:互联网 发布:甲骨文软件系统公司 编辑:程序博客网 时间:2024/06/04 17:39

题目分析:

要想完成此题,需用到了二分图的知识。包括:

1.二分图的基本概念

2.最大匹配的概念

3.增广路径的概念

4.匈牙利算法

1.2.3概念参考资料:点击打开链接

匈牙利算法参考资料:http://wenku.baidu.com/view/d1070024af45b307e8719770.html

解题思路:http://www.cnblogs.com/lyy289065406/archive/2011/07/30/2121730.html

我用C写的:

#include<stdio.h>int result[501];int mark[501];int map[501][501];int find(int i,int a);int main(){    int a,b,x,y,i,j,count;    count=0;    scanf("%d %d",&a,&b);    for(j=0; j<=a; j++)    {        for(i=0; i<=a; i++)            map[j][i]=0;        result[j]=0;        mark[j]=0;    }    for(i=1; i<=b; i++)    {        scanf("%d %d",&x,&y);        map[x][y]=1;    }    for(i=1; i<=a; i++)    {        for(j=0; j<=a; j++)            mark[j]=0;        if(find(i,a))        {            count++;        }    }    printf("%d\n",count);}int find(int i,int a){    int j;    for(j=1; j<=a; j++)    {        if(map[i][j]==1&&mark[j]==0)        {            mark[j]=1;            if(result[j]==0||find(result[j],a))            {                result[j]=i;                return 1;            }        }    }    return 0;}


 

原创粉丝点击