Pku acm 3041 Asteroids 数据结构题目解题报告(十六)---- 匈牙利算法求二分图的最大匹配

阅读本文前请先阅读我blog的另一篇文章:匈牙利算法求二分图的最大匹配(2008-4-12).
题目给出一个矩阵,上面有敌人,每个子弹可以打出一横行或者一竖行,问最少用多少子弹消灭都有敌人,如:
X.X
.X.
.X.
x 表示敌人,显然用两个子弹就可以解决所有敌人。
下面介绍一下二分图的最小点覆盖数:假如选了一个点就相当于覆盖了以它为端点的所有边,你需要选择最少的点来覆盖所有的边。König定理是一个二分图中很重要的定理,它的意思是,一个二分图中的最大匹配数等于这个图中的最小点覆盖数。
这样,我们可以构建一个这样的二分图,左右边的结点数分别是矩阵的行和列,然后有敌人的地方就连接上(例如第一行第一列有敌人,就连接左边的1和右边的1),这样,二分图中的每条边就代表一个敌人,我们找到最少的n个点,这n个点能覆盖二分图中的所有边,即是最小点覆盖数,根据König定理,一个二分图中的最大匹配数等于这个图中的最小点覆盖数,所以只要求这样一个二分图的最大二分匹配即可。
带有详细注释的代码可以在http://download.csdn.net/user/china8848/获得 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值