令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. 对着电脑笑了二十分钟(2)
  2. 黄聪:wordpress文章同步发布到网易、天涯、新浪博客、百度空间插件
  3. Python——raise引发异常
  4. excel单元格斜线_Excel技巧 | 如何绘制斜线表头
  5. c语言中合法转义字符,判断c语言合法转义字符
  6. 配置 --- 将本地项目部署到阿里云上
  7. 22 React高阶组件
  8. 江西理工大学南昌校区cool code竞赛
  9. 柔性数组和环形队列之间的故事
  10. Python解析url、提取url参数、提取url数据(Python2、Python3、提取url、端口、协议、路径)
  11. 字符串查找KMP算法(转)
  12. linux 下 c++ 实现 netstat_Linux下基于签名技术的软件保护之实现流程
  13. 学javascript看什么书?
  14. paypal支付交易数据
  15. Pr入门系列之十一:基本图形(上)
  16. 注销的计算机管理员如何恢复,十分钟后如何注销用户?Power Manager是这样做的!...
  17. iOS依赖注入框架系列(三):模块化Typhoon
  18. Windows 使用命令行修改密码
  19. 无线路由器使用交换机模式上网不稳定
  20. CentOS部署ScyllaDB 3.3集群

热门文章

  1. AI遮天传 DL-反馈神经网络RNN
  2. linux下磁盘测速工具
  3. latex 插入Logo
  4. 激光SLAM入门笔记(五):前端配准 II
  5. 企业选择局域网即时通讯软件的必要性是什么?
  6. ABP官方文档(五)【多租户】
  7. 异常 exception
  8. AMBA总线协议(三)——一文看懂AHB总线所有协议总结(AHB2 AHB-Lite AHB5 )
  9. R语言相关性分析及步骤
  10. javax.persistence.OneToMany.orphanRemoval()Z