折腾了一晚上就弄了一个这个。。明天的实验室的题还没出,后天还有和朋友相约VOJ,周六还要BC签到。 啊啊啊啊还有好多东西要学,这周结束数据结构。
本来想看啊哈算法的,发现好烦啊,直接做一题基础题,看了Dark_Scope大牛的趣写算法—匈牙利算法,默默的A了一题,有个印象。
明天结合数据结构看看。 然后就是一开始把line初始化为-1.。。结果WAWAWAWA。。。false的值是0000000!!!!荒废我一个晚上!!
#include "iostream" #include "cmath" #include "algorithm" using namespace std; #define Max 1000 int boy[Max]; bool line[Max][Max]; bool used[Max]; int num,gnum,bnum; int find (int x); int main(int argc, char const *argv[]) { while(~scanf("%d",&num) && num) { scanf("%d %d",&gnum,&bnum); memset(line,false,sizeof(line)); memset(boy,-1,sizeof(boy)); int ans=0; for (int i = 1; i <= num; ++i) { int a,b; scanf("%d %d",&a,&b); line[a][b]=true; } for (int i = 1; i <= gnum; ++i)//0搜索就会错的,这边是从1个人开始到最后一个人,下面同理 { memset(used,false,sizeof(used)); if(find(i)) ans++; //是不是这里错了不能a } printf("%d\n",ans); } return 0; } int find(int x) { for (int i = 1; i <= bnum; ++i)//这边要开等号。 { if(!used[i] && line[x][i]) { used[i]=true; if(boy[i] == -1 || find(boy[i]))//该男生是单身狗 或者 为了最大匹配女生找其他男生 { boy[i] = x;//男生i和女生x在一起 return 1; } } } return 0; }