zoukankan      html  css  js  c++  java
  • 过山车(匈牙利算法,最大二分图匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=2063

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 const int N = 500+10;
     6 int gil,boy;
     7 int gil_boy[N][N];
     8 int flg[N];//在递归过程中男生N是否有女朋友
     9 int bg[N];//男生N的女朋友
    10 //匈牙利算法
    11 int xfind(int g)//女生g找男朋友
    12 {
    13     int b;//男生b
    14     for(b=1;b<=boy;b++)//找可以匹配的男生
    15     {
    16         if(gil_boy[g][b]&&!flg[b])//可以匹配并且该男生在这一轮中还没有匹配
    17         {
    18             flg[b]=1;//匹配
    19             if(!bg[b]||xfind(bg[b]))//该男生没有女朋友或者他的女朋友可以再找一个男朋友
    20             {
    21                 bg[b]=g;//女生g找到男朋友b,匹配成功
    22                 return 1;
    23             }
    24         }
    25     }
    26     return 0;//匹配失败
    27 }
    28 int main()
    29 {
    30     int i,m,g,b,ans;
    31     while(cin>>m&&m)
    32     {
    33         cin>>gil>>boy;ans=0;
    34         memset(gil_boy,0,sizeof(gil_boy));
    35         memset(bg,0,sizeof(bg));
    36         for(i=0;i<m;i++)
    37         {
    38             scanf("%d%d",&g,&b);
    39             gil_boy[g][b]=1;
    40         }
    41         for(g=1;g<=gil;g++)//每个女生找男朋友
    42         {
    43             memset(flg,0,sizeof(flg));
    44             if(xfind(g)) ans++;//女生找到男朋友
    45         }
    46         cout<<ans<<endl;
    47     }
    48     return 0;
    49 }
  • 相关阅读:
    决策树
    交叉熵与softmax
    集成学习
    SVM算法
    蒙特卡罗方法
    K近邻--KNN
    K-Means聚类
    DBSCAN密度聚类
    Bagging、随机森林
    支持向量机SVM
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2588426.html
Copyright © 2011-2022 走看看