匈牙利算法

老是忘记这东西怎么写,在这里记一下。

在集合A和集合B中找出最大匹配。

 1 int find(int a)
 2 {
 3      for (int b = 0;b < B;b++)
 4      {
 5           if (line[a][b] && !vis[b])
 6           {
 7                vis[b] = 1;
 8                if (from[b] == -1 || find(from[b]))
 9                {
10                     from[b] = a;
11                     return true;
12                }
13           }
14      }
15      return false;
16 }
17 
18 // 调用
19 
20 for (int a = 0;a < A;a++)
21 {
22      memset(vis, 0, sizeof(vis));
23      if (find(a)) ans++;
24 }
原文地址:https://www.cnblogs.com/lightning34/p/4326864.html