• 匈牙利算法


    写的很好的一篇博客,可以看看哦!

    http://blog.csdn.net/dark_scope/article/details/8880547

    poj 2239

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<math.h>
     4 #include<string.h>
     5 #include<algorithm>
     6 using namespace std;
     7 int n,m;
     8 int map[305][305];
     9 int used[305];
    10 int girl[305];
    11 int find(int x)
    12 {
    13     int i,j;
    14     for(i=1;i<=m;i++)
    15     {
    16         if(map[x][i]==1&&used[i]==0)///如果有联系,并且还未被占用
    17             ///如果有暧昧并且还没有标记过(这里标记的意思是这次查找曾试图改变过该妹子的归属问题,但是没有成功,所以就不用瞎费工夫了)
    18         {
    19             used[i]=1;///占用
    20             if(girl[i]==0||find(girl[i]))///如果名花无主或正能找到该妹子的归属问题
    21             {
    22                 girl[i]=x;///将该妹子归属于x
    23                 return 1;///已经找到x的另一半,返回
    24             }
    25         }
    26     }
    27     return 0;///没找到
    28 }
    29 int main()
    30 {
    31     int t,clas,day;
    32     while(scanf("%d",&n)!=EOF)
    33     {
    34         int sum=0;
    35         memset(map,0,sizeof(map));
    36         memset(girl,0,sizeof(girl));
    37         m=7*12;
    38         for(int i=1;i<=n;i++)
    39         {
    40             scanf("%d",&t);
    41             while(t--)
    42             {
    43                 scanf("%d%d",&day,&clas);
    44                 map[i][(day-1)*12+clas]=1;///有关联的标记为1
    45             }
    46         }
    47        for(int i=1;i<=n;i++)
    48        {
    49            memset(used,0,sizeof(used));///每次使用都清零
    50            if(find(i))///如果能找到,就加1
    51             sum++;
    52        }
    53        printf("%d
    ",sum);
    54     }
    55 
    56 }
    View Code
  • 相关阅读:
    团队项目——技术规格说明书
    Scrum Meeting 11.1
    Scrum Meeting 10.31
    Scrum Meeting 10.30
    Scrum Meeting 10.29
    Scrum Meeting 10.28
    Scrum Meeting 10.27
    Scrum Meeting 10.26
    团队作业Week5
    Boost C++: 数据结构---tuple
  • 原文地址:https://www.cnblogs.com/xiaotian-222/p/5452649.html
Copyright © 2020-2023  润新知