利用Kuhn-Munkras算法求最小权值匹配

本文介绍了如何利用Kuhn-Munkras(KM)算法求解带权二分图中的最小权值匹配。KM算法通常用于求最大权值匹配,通过将权值取反或加负数来寻找最小权值匹配。在处理不存在的边时,需要避免溢出,可能需要将不存在的边权值设为极大值。KM算法要求X集合的点数小于等于Y集合的点数,可以通过拓展Y集合实现一一对应。此外,文章还提及了二分图、最大匹配、完备匹配和完美匹配的概念,以及匈牙利算法在求解最大匹配中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文参考博客:
http://blog.youkuaiyun.com/zhangpinghao/article/details/12242823(代码参考该博客)
http://philoscience.iteye.com/blog/1754498(个人认为对km算法讲解比较好)

KM算法求的是基于带权二分图中完备匹配下的最大权值匹配。关于km算法的讲解网上资料比较丰富,此处就不详述啦。这里主要整理一些用KM算法求最小权值匹配的一些问题。

  • 在求最大权值匹配时,不存在的边的权值设为0。在求最小权值匹配时,可以考虑将对应的权值变为相反数,或者用一个很大的数减去权值,然后再来求最大权值匹配,最后将权值和取反即可。如果使用将对应的权值变为相反数的方法,则不存在的边的权值此时要设为INT_MAX(即,实际中求匹配时使用的是-INT_MAX),如此设置之后还需要特别注意溢出的问题, if( !sy[j] && ((lx[i] + ly[j] - weight[i][j] )<inc) 这一句对于带符号整型数可能会溢出,所以此句可以改成if( !sy[j] && weight[i][j]!=-INT_MAX && ((lx[i] + ly[j] - weight[i][j] )<inc),即不予考虑不存在的边。<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值