码迷,mamicode.com
首页 > 编程语言 > 详细

二分图最大匹配的匈牙利算法伪代码

时间:2016-07-30 01:40:32      阅读:1255      评论:0      收藏:0      [点我收藏+]

标签:

值得一提的是,用于标记的数组 book (代码中简写为了 bok)的每次清空,无论是调用 memset 函数

还是手写循环来清零,都会耗费大量时间。

而这一步骤可以通过用 int book 而非 bool book 来设置一个额外的标记 id ,避免了清空操作耗时。

具体的实现非常简单,参看代码。

 1 bool find(int node, int id)
 2 {
 3     for (int p = fst[node]; p; p = nxt[p]) {
 4         if (bok[v[p]] == id)
 5             continue;
 6         bok[v[p]] = id;
 7         if (lnk[v[p]] && !find(lnk[v[p]], id))
 8             continue;
 9         lnk[v[p]] = node;
10         return true;
11     }
12     return false;
13 }
14 
15 int main()
16 {
17     /* input */
18     
19     for (i = 1; i <= n; ++i)
20         ans += find(i, i);
21     printf("%d\n", ans);
22     return 0;
23 }

 

二分图最大匹配的匈牙利算法伪代码

标签:

原文地址:http://www.cnblogs.com/ghcred/p/5720063.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!