匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。

-------等等,看得头大?那么请看下面的版本:

通过数代人的努力,你终于赶上了剩男剩女的大潮,假设你是一位光荣的新世纪媒人,在你的手上有N个剩男,M个剩女,每个人都可能对多名异性有好感(-_-||暂时不考虑特殊的性取向),如果一对男女互有好感,那么你就可以把这一对撮合在一起,现在让我们无视掉所有的单相思(好忧伤的感觉),你拥有的大概就是下面这样一张关系图,每一条连线都表示互有好感。

本着救人一命,胜造七级浮屠的原则,你想要尽可能地撮合更多的情侣,匈牙利算法的工作模式会教你这样做:

===============================================================================

一: 先试着给1号男生找妹子,发现第一个和他相连的1号女生还名花无主,got it,连上一条蓝线

===============================================================================

二:接着给2号男生找妹子,发现第一个和他相连的2号女生名花无主,got it

===============================================================================

三:接下来是3号男生,很遗憾1号女生已经有主了,怎么办呢?

我们试着给之前1号女生匹配的男生(也就是1号男生)另外分配一个妹子。

(黄色表示这条边被临时拆掉)

与1号男生相连的第二个女生是2号女生,但是2号女生也有主了,怎么办呢?我们再试着给2号女生的原配()重新找个妹子(注意这个步骤和上面是一样的,这是一个递归的过程)

此时发现2号男生还能找到3号女生,那么之前的问题迎刃而解了,回溯回去

2号男生可以找3号妹子~~~                  1号男生可以找2号妹子了~~~                3号男生可以找1号妹子

所以第三步最后的结果就是:

===============================================================================

四: 接下来是4号男生,很遗憾,按照第三步的节奏我们没法给4号男生腾出来一个妹子,我们实在是无能为力了……香吉士同学走好。

===============================================================================

这就是匈牙利算法的流程,其中找妹子是个递归的过程,最最关键的字就是“腾”字

其原则大概是:有机会上,没机会创造机会也要上

模板:

int find(int x)
{for(int i=1; i<=m; i++)//遍历所有被选者 {if(!v[i]&&p[x][i])//如果 x对i有好感且在这一个递归选取阶段没有被选取(哪怕是暂时选取,新的递归可能会换) {v[i]=1;//标记被选取  if(!_map[i]||find(_map[i]))//如果被选者没有归属或他的归属着可以调换(他的归属者可以选择其它被选者) {_map[i]=x;//将归属定为 x return 1;}}}return 0;
}

二分匹配(匈牙利算法)相关推荐

  1. HDU-3729 二分匹配 匈牙利算法

    题目大意:学生给出其成绩区间,但可能出现矛盾情况,找出合理组合使没有说谎的人尽可能多,并按maximum lexicographic规则输出组合. //用学生去和成绩匹配,成绩区间就是学生可以匹配的成 ...

  2. 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. 二分图匹配--匈牙利算法

    文章目录 二分图: 匹配 匈牙利算法 代码: 二分图: 二分图是一个无向图,点集分成子集X和Y,图中每一条边都是一边在X一边在Y 当且仅当无向图G的每一个回路次数都是偶数时(包括0),G就是一个二分图 ...

  4. nyoj-239 月老的难题 (二分图匹配—匈牙利算法 网络流—Dinic算法)

    月老的难题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. 现在,由于一些原因,部分男孩与女孩可能结成幸福的一 ...

  5. 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配

    数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...

  6. 二分图匹配-匈牙利算法

    说到二分,我们就很容易想到二分查找算法,今年下半年--,今天所介绍的二分图和二分查找没有太大的联系,我们先来看一下它的定义: 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图 ...

  7. 二分图匹配匈牙利算法DFS实现

    1 /*==================================================*\ 2 | 二分图匹配(匈牙利算法DFS 实现) 3 | INIT: g[][]邻接矩阵; ...

  8. HDU 2389 Rain on your Parade(二分匹配+Hopcroft-Carp算法模板题)

    You're giving a party in the garden of your villa by the sea. The party is a huge success, and every ...

  9. 华为机试 素数伴侣 匹配匈牙利算法

    题目描述 题目描述 若两个正整数的和为素数,则这两个正整数称之为"素数伴侣",如2和5.6和13,它们能应用于通信加密.现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数 ...

  10. 二分图的匹配——匈牙利算法

    什么是匹配 匹配:在图论中,一个「匹配」是一个边的集合,其中任意两条边都没有公共顶点. 最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配. 二分图的匹配:给定一个二分图G,在G ...

最新文章

  1. go语言中的变量与作用域
  2. 《DBA修炼之道:数据库管理员的第一本书》——1.2节独特的优势
  3. 解决IDEA本地仓库有jar包却无法引用和打包问题
  4. (转载)Linux僵死进程的产生与避免
  5. 会写高考作文的AI,内含17亿参数、2亿数据、1万行代码
  6. “618”台前幕后的那些事
  7. Build tool
  8. 【贪心】【codevs】1098 均分纸牌
  9. 为什么要进行网络的分层?
  10. ColorTransform类应用实例:鼠标经过时使图片发光。
  11. python的小tips
  12. Js根据域名判断显示不同内容
  13. 【面试题】有一个数组,每隔两个数删掉一个数,到末尾又循环到开头继续进行,求最后一个被删除的数的原始下标位置
  14. 闪迪u盘不能识别好办法_U盘不能识别怎么办 U盘无法识别的7种解决方法
  15. mysql 不会丢失数据吗_讨论MySQL丢失数据的几种情况
  16. 十分钟一起学会Inception网络
  17. CVE-2021-1732:Windows Win32k提权
  18. Mysql出现问题:服务器的数据库安装成功,无法远程访问解决方案
  19. 深度学习代码实践(三)5行代码创建手写数字体识别的Tensorflow模型
  20. 上海通联支付java面试_通联支付面试经验

热门文章

  1. lucene 索引优化
  2. 命令行选项解析函数(C语言):getopt()和getopt_long()
  3. DDoS(Distributed Denial of Service,分布式拒绝服务)
  4. !!基础---c# 下载网页+图片
  5. matlab中svd函数用法总结
  6. 吴恩达 coursera ML 第十七课总结+作业答案
  7. Python:C语言扩展
  8. python中调用c库
  9. 改变服务器控件的显示属性,2.6.1 设置Style特性和其他属性
  10. 科大星云诗社动态20201119