二分图最大匹配的经典匈牙利算法是由Edmonds在1965年提出的,算法的核心就是根据一个初始匹配不停的找增广路,直到没有增广路为止。
匈牙利算法的本质实际上和基于增广路特性的最大流算法还是相似的,只需要注意两点:
(一)每个X节点都最多做一次增广路的起点;
(二)如果一个Y节点已经匹配了,那么增广路到这儿的时候唯一的路径是走到Y节点的匹配点(可以回忆最大流算法中的后向边,这个时候后向边是可以增流的)。
    找增广路的时候既可以采用dfs也可以采用bfs,两者都可以保证O(nm)的复杂度,因为每找一条增广路的复杂度是O(m),而最多增广n次,dfs在实际实现中更加简短。
算法思想:

算 法的思路是不停的找增广轨,并增加匹配的个数,增广轨顾名思义是指一条可以使匹配数变多的路径,在匹配问题中,增广轨的表现形式是一条"交错轨",也就是 说这条由图的边组成的路径,它的第一条边是目前还没有参与匹配的,第二条边参与了匹配,第三条边没有..最后一条边没有参与匹配,并且始点和终点还没有被 选择过.这样交错进行,显然他有奇数条边.那么对于这样一条路径,我们可以将第一条边改为已匹配,第二条边改为未匹配...以此类推.也就是将所有的边进 行"反色",容易发现这样修改以后,匹配仍然是合法的,但是匹配数增加了一对.另外,单独的一条连接两个未匹配点的边显然也是交错轨.可以证明,当不能再 找到增广轨时,就得到了一个最大匹配.这也就是匈牙利算法的思路.
DFS:

 1 int w[NX][NY]; //X中的点到Y中的点的连接矩阵,w[i][j]是边<Vxi,Vyj>的权
 2 int m[NY]; //Vyi的匹配对象
 3 int v[NY]; //在一次DFS中,Vyi是否被访问过
 4 bool dfs(int k){ //以Vxk为起点找交替路径
 5     int i;
 6     for(i=1;i<=N;i++){
 7         if(!v[i] && w[k][i]){ //如果Vyi未访问过,而且Vxk,Vyi有边连接
 8             v[i]=1;
 9             if(!m[i] || dfs(m[i])){ //如果Vyi是未浸润点,或者以Vyi原来的匹配点为起始,有扩张路径
10                 m[i]=k;
11                 return true; //扩张成功
12             }
13         }
14     }
15     return false;
16 }

二分图最大匹配的经典匈牙利算法相关推荐

  1. 二分图最大匹配问题(匈牙利算法)

    什么是二分图 如果一个无向图的的顶点可以分为两个互不相交的子集A和B,那么它就是二分图.也就是说,A.B内部不存在连边,所有连边都一头连着A中的顶点,另一头连着B中的顶点. 什么是二分图最大匹配? 二 ...

  2. AcWing 861. 二分图的最大匹配(Java)_匈牙利算法

    二分图的最大匹配 ①. 题目 ②. 思路 ③. 学习点 ④. 代码实现 原题链接 ①. 题目 ②. 思路 匹配:在图论中,一个「匹配」是一个边的集合,其中任意两条边都没有公共顶点. 最大匹配:一个图所 ...

  3. 【算法基础】二分图(染色法 匈牙利算法)

    一.二分图 1. 染色法 一个图是二分图,当且仅当,图中不含奇数环.在判别一个图是否为二分图⑩,其实相当于染色问题,每条边的两个点必须是不同的颜色,一共有两种颜色,如果染色过程中出现矛盾,则说明不是二 ...

  4. 【二分图】【最大匹配】【匈牙利算法】CODEVS 2776 寻找代表元

    裸的匈牙利,存模板. 1 #include<cstdio> 2 #include<vector> 3 #include<cstring> 4 using names ...

  5. 多目标跟踪之匈牙利算法

    0 前言 目标跟踪(Object Tracking)是自动驾驶中非常常见的任务,根据跟踪目标数量的不同,目标跟踪可分为: 单目标跟踪(Single Object Tracking,SOT) 多目标跟踪 ...

  6. 2022牛客多校十 E-Reviewer Assignment(匈牙利算法)

    题目链接:登录-专业IT笔试面试备考平台_牛客网 题目: 样例输入: 5 3 010 010 101 011 100 样例输出: 2 2 1 3 1 题意:给定n个人和m篇文章,然后给出一个n*m的矩 ...

  7. 匈牙利算法Hungarian algorithm

    匈牙利算法是解决寻找二分图最大匹配的. 匈牙利算法(Hungarian Algorithm)是一种组合优化算法(combinatorial optimization algorithm),换句话说就是 ...

  8. 二分图带权最大匹配费用流_简单理解二分图与匈牙利算法

    最近在看DETR等论文时时,看到了使用了二分图的最大匹配,对于没有计算机基础的我表示直接上来???,因此本篇博客主要介绍什么是二分图,以及二分图的匹配的匈牙利算法. 首先我们来看看二分图的定义: 二分 ...

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

    二分图的匹配:给定一个二分图G,在G中的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配. 二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其 ...

  10. HDU - 2389 Rain on your Parade(Hopcroft-Krap算法求二分图最大匹配)

    题目链接:点击查看 题目大意:给出n个人和m个雨伞,t分钟后就要下雨了,现在给出每个人的坐标和速度,以及雨伞所在的坐标,每个雨伞只能容纳一个人,题目问最多有多少个人能不被淋到 题目分析:二分图最大匹配 ...

最新文章

  1. Java 静态变量,静态方法,静态常量(java static 关键字)
  2. Hinton再挖新坑:改进胶囊网络,融合Transformer神经场等研究
  3. C/C++ 知识点---LIB和DLL的区别与使用(网摘)
  4. undo系统参数详解
  5. 如何做到免驱打印_道滘镇彩色打印机租赁公司,长安镇办公室绿植安装
  6. vue中如何实现点击某个地方,让echarts生成的图表发生变化
  7. Java High CPU故障排除指南–第1部分
  8. mysql 注入 绕过防火墙_绕过阿里云防火墙继续扫描探测和SQL注入
  9. ListView 和 GridView应用详解-----本文转自博客园
  10. 前端性能优化的七大手段
  11. linux 影院 ftp客户端20端口号,Linux下的ftp客户端说明文档
  12. 在CSDN的博文中如何添加博主名片
  13. html5音乐播放器歌词显示,(1)H5实现音乐播放器【正在播放-歌词篇】
  14. matlab中如何求导数,matlab如何求导数
  15. 斐讯k2怎么设置虚拟服务器,设置斐讯K2路由器上网连接教程 | 192路由网
  16. JetSmartFilters: 如何制作搜索过滤器(1) 使用Jet-Engine
  17. Python3 将本地时间转换成指定时区时间
  18. python类和属性的应用搬家具
  19. 输入国家名按字典顺序进行排序
  20. fishtank 测试 linux,Fishtank fitts:a desktop VR testbed for evaluating 3D pointing techniques

热门文章

  1. SpringMVC之拦截器实现登录验证
  2. 腾讯云安全:移动 APP 安全行业报告
  3. chrome webstore
  4. hibernate笔记4--qbc查询
  5. 目前流行的源程序版本管理软件和项目管理的软件优缺点
  6. Android 窗口全屏
  7. Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作
  8. PuTTY 私钥'putty/sshdss.c' 多个信息泄露漏洞
  9. php-5.6.26源代码 - hash存储结构 - hash算法
  10. cmd 编码修改。 牛阿。 解决问题