令G = (X,*,Y)是一个二分图,其中,X = {x1,x2,...xm}, Y = {y1,y2,...yn}。令M为G中的任一个匹配。

1)讲X的所有不与M的边关联的顶点标上(@),并称所有的顶点为未被扫描的。转到 2)。
2)如果在上一步没有新的标记加到X的顶点上,则停止。否则转到 3)。
3)当存在X被标记但未被扫描的顶点时,选择一个被标记但未被扫描的X的顶点,比如,xi,用(xi)标记Y的所有顶点,这些顶点被不属于M且尚未标记的边连到xi .现在,顶点xi是被扫描的。如果不存在被标记但未被扫描的顶点,则转到 4)。
4)如果在步骤 3)没有新的标记被标到Y的顶点上,则停止。否则,转到 5)。
5)当存在Y被标记但未被扫描的顶点时,选择Y的一个被标记但未被扫描的顶点,比如yi,用(yi)标记X的顶点,这些顶点被属于M且尚未标记的边连到yi.现在,顶点yi是被扫描的。如果不存在被标记但未被扫描的顶点,则转到 2)。

也可以叙述为:
[ZZ]匈牙利算法
关键在于匈牙利算法的递归过程中有很多重复计算的节点,而且这种重复无法避免,他不能
向动态规划一样找到一个“序”将递归改为递推。                                     
                                                       
算法中的几个术语说明:
1。二部图:
 如果图G=(V,E)的顶点集何V可分为两个集合X,Y,且满足 X∪Y = V, X∩Y=Φ,则G称为二
部图;
 图G的边集用E(G)表示,点集用V(G)表示。
2。匹配:
 设M是E(G)的一个子集,如果M中任意两条边在G中均不邻接,则称M是G的一个匹配。M中的
—条边的两个端点叫做在M是配对的。   
3。饱和与非饱和:
  若匹配M的某条边与顶点v关联,则称M饱和顶点v,并且称v是M-饱和的,否则称v是M-不
饱和的。
4。交互道:
  若M是二分图G=(V,E)的一个匹配。设从图G中的一个顶点到另一个顶点存在一条道路,
这条道路是由属于M的边和不属于M的边交替出现组成的,则称这条道路为交互道。
5。可增广道路:
  若一交互道的两端点为关于M非饱和顶点时,则称这条交互道是可增广道路。显然,一条
边的两端点非饱和,则这条边也是可增广道路。
6。最大匹配:
  如果M是一匹配,而不存在其它匹配M',使得|M'|>|M|,则称M是最大匹配。其中|M|表示
匹配M的边数。
7。对称差:
  A,B是两个集合,定义
     A⊕B = (A∪B)/(A∩B)
  则A⊕B称为A和B的对称差。
   
定理:M为G的最大匹配的充要条件是G中不存在可增广道路。
   
Hall定理:对于二部图G,存在一个匹配M,使得X的所有顶点关于M饱和的充要条件是:对于
X的任意一个子集A,和A邻接的点集为T(A),恒有: |T(A)| >= |A|

匈牙利算法是基于Hall定理中充分性证明的思想,其基本步骤为:
1。任给初始匹配M;
2。若X已饱和则结束,否则进行第3步;
3。在X中找到一个非饱和顶点x0,作
    V1 ← {x0},  V2 ← Φ
4。若T(V1) = V2则因为无法匹配而停止,否则任选一点y ∈T(V1)/V2;
5。若y已饱和则转6,否则做一条从x0 →y的可增广道路P,M←M⊕E(P),转2;
6。由于y已饱和,所以M中有一条边(y,z),作 V1 ← V1 ∪{z}, V2 ← V2 ∪ {y}, 转4;

二分图最大匹配的算法相关推荐

  1. 二分图最大匹配—匈牙利算法

    二分图:又叫二部图,图G中顶点集V可以分成互不相交的子集(X,Y),并且图中的每一条边所关联的点分别属于两个不同的顶点集,则图G叫二分图.(不含奇环) 二分图的匹配:给定一个二分图G的子图M,M的边集 ...

  2. 二分图最大匹配-匈牙利算法

    今天介绍 匈牙利算法 : 匈牙利算法,是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,由匈牙利数学家Edmonds于1965年提出,因而得名. 先介绍一下 ...

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

    问题描述: X集合(编号1~m),Y集合(编号m+1~n).n,m<100. 给出若干组合(x, y)(相当于映射x->y),问最都能同时有几个组合(分配). 分析: 题目可能简化描述得不 ...

  4. 二分图最大匹配——匈牙利算法

    二分图最大匹配 (一).二分图的介绍 1.定义 2.充要条件 (二).二分图的匹配 1.二分图的最大匹配 2.增广路径 3.匈牙利算法 (1).复杂度 (2).算法思路 (3).代码实现 (一).二分 ...

  5. 二分图最大匹配(匈牙利算法Dinic算法)

    二分图最大匹配: 给出一个二分图,左边有若干个节点,右边有若干个节点,左边的节点想到匹配右边的节点,每个左边的节点每个都有若干个可以选择的对象,每个左边节点只能选择一个右边节点,每个右边节点也只能被选 ...

  6. NYOJ 题目239 月老的难题 (二分图最大匹配-匈牙利算法模板)

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

  7. 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement

    题目传送门 1 /* 2 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 3 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 4 */ 5 ...

  8. 二分图最大匹配 -- 匈牙利算法

    Algorithm.( Augmenting Path Algorithm ) Input:     An X-Y bigraph G, a matching M in G,     and the ...

  9. NYOJ - 239 - 月老的难题 ( 二分图最大匹配 匈牙利算法 )

    描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. 现在,由于一些原因,部分男孩与女孩可能结成幸福的一家,部分可能不会结成幸福的家庭. 现在已知哪些男孩与哪些女孩如果结婚的话,可以结成幸 ...

最新文章

  1. Scala学习 day01 Scala的类/方法/对象/单例对象
  2. 2.1 基础-数字翻转
  3. Ubuntu安装apache+Yii2
  4. 想不到吧,这些都能用R!
  5. TCP Socket 粘包
  6. php数组去交集,PHP获得数组交集与差集的方法
  7. SpringSecurity AuthenticationManagerProviderManager
  8. 一文梳理序列化推荐算法模型进展
  9. sql server 面试_SQL Server审核面试问题
  10. 【Asp.Net】div和span元素的区别
  11. 单片机 矩阵式按键
  12. 用SPSS求均值 方差 标准差小例题
  13. 东芝有刷直流电机驱动器IC TB67H450FNG
  14. 一张图看懂手机CPU性能——手机CPU性能天梯图
  15. 谷歌的新系统Fuchsia OS根本不能替代安卓
  16. The Pilots Brothers refrigerator's 题解
  17. wmm的学习日记(XSS跨站脚本漏洞)
  18. 【语音处理】一种增强的隐写及其在IP语音隐写中的应用(Matlab代码实现)
  19. 短视频源码仿抖音短视频APP源码短视频平台源码短视频源码
  20. 企业微信应用授权,第一次不授权手机号后如何再次开启

热门文章

  1. 3559A sample hifb解析
  2. zz:Android APP Monkey信息自动收集脚本
  3. svn分支介绍和使用
  4. 管理学生营养餐很重要
  5. 【C语言中“%d %%d %%%d“代表的意思】
  6. ABP官方文档(五)【多租户】
  7. 中国为什么没有根域名服务器
  8. 两个小Tips: 解决Matlab初始化时间过长Office使用(KMS工具无效时)
  9. 用python每日更换“必应图片”为“桌面壁纸”
  10. poi-导出excel表格