hdu2063 过山车 二分图/最大匹配(匈牙利算法)
来源:互联网 发布:我想开淘宝网店怎么开 编辑:程序博客网 时间:2024/04/30 20:14
题目大意:
给出一串关系,求最大匹配数目
大概思路:
(拿样例说明)
6 3 3
1 1
1 2
1 3
2 1
2 3
3 1
0
循环女生:
1号女生能与1号男生匹配,count++;
2号女生发现1号男生已经与1号女生匹配过了,恰好1号女生能与2号男生匹配,那么让1号女生与2号男生匹配,2号女生与1号男生匹配,count++;
3号女生发现1号男生已经与2号女生匹配过了,而2号女生还能与3号男生匹配,那么让2号女生与3号男生匹配,3号女生与1号男生匹配,count++;
所有女生遍历完,循环结束。
C:
#include<stdio.h>#include<string.h>int girl[510],used[510];int map[510][510];int gnum,bnum;int find(int a){ for(int i=1;i<=bnum;i++){ //这里要遍历男生 if(map[a][i]==1&&used[i]==0){ //如果a号女生跟i号男生有关系或这个男生没有被匹配过 used[i]=1; //标记 if(girl[i]==0||find(girl[i])){//如果这个男生没有被匹配给任何女生||这个男生被匹配的女生能够再找个男生 girl[i]=a; //就把a跟i匹配 return 1; //成功匹配 } } } return 0; //遍历男生后都不能匹配,匹配失败}int main(){ int n; while(scanf("%d",&n)!=EOF){ memset(map,0,sizeof(map)); memset(girl,0,sizeof(girl)); if(n==0) break; scanf("%d%d",&gnum,&bnum); while(n--){ int a,b; scanf("%d%d",&a,&b); map[a][b]=1; } int count=0; for(int i=1;i<=gnum;i++){ //主函数中循环女生 memset(used,0,sizeof(used)); //这个used函数指的是每次为女生匹配男生时,判断男生是否被匹配过,所以每次find()前都应当清零 count+=find(i); } printf("%d\n",count); } return 0;}
0 0
- hdu2063 过山车 二分图/最大匹配(匈牙利算法)
- 【HDU2063】过山车(二分图最大匹配,匈牙利算法)
- hdu2063 过山车 二分图最大匹配 匈牙利算法
- HDU2063过山车 匈牙利二分图最大匹配
- hdu2063[过山车] 二分图匹配 匈牙利算法
- hdu2063 过山车 (二分图匹配,匈牙利算法)
- hdu2063过山车(匈牙利算法)二分图匹配
- HDU2063 过山车(二分图最大匹配)
- hdu2063 过山车 (匈牙利算法 二分匹配)
- hdu2063 过山车 二分匹配 匈牙利算法
- HDU2063 过山车(二分图匹配-匈牙利算法模版题)
- HDU2063——过山车(二分图,匈牙利算法2)
- hdu 2063 过山车(二分图最大匹配-匈牙利算法)
- Hdu2063—过山车 二分图最大匹配
- HDU2063 过山车 【二分图·最大匹配】
- 【二分图最大匹配】【HDU2063】过山车
- 【最大流,二分图匹配】【hdu2063】【过山车】
- hdu2063 过山车(二分图最大匹配基础)
- Spring boot---整合mybatis (oracle)
- 数组排序方法比较
- cocos2dx 3.10 lua环境配置与代码调试
- Delphi 中的哈希表(1): THashedStringList
- linux上git如何正确回滚代码
- hdu2063 过山车 二分图/最大匹配(匈牙利算法)
- oracle中关于对表的一些操作和表的备份
- 工程实践
- CSS绝对定位相对定位
- 定制MFC多文档窗口的主框架背景
- 'Invalid parameter not satisfying: URLString'
- selenium 定位不到元素的原因及解决办法
- Junit与log4j的整合问题
- 【BZOJ 1005】[HNOI2008]明明的烦恼(化简的另一种方法)