【任务】

给定一个二分图,用匈牙利算法求这个二分图的最大匹配数。

【说明】

求最大匹配,那么我们希望每一个在左边的点都尽量找到右边的一个点和它匹配。

我们一次枚举左边的点x的所有出边指向的点y,

若y之前没有被匹配,那么(x,y)就是一对合法的匹配,我们将匹配数加一,

否则我们试图给原来匹配的y和x’重新找一个匹配,如果x’匹配成功,那么(x,y)就可以新增为一对合法的匹配。

给x’寻找匹配的过程可以递归解决。

【接口】

int hungary();

复杂度O(|E|*sqrt(|V|))

输入: n    全局变量,左侧的点数

   g    全局变量,g[i]表示与左边点i相连的右边的点

输出:tot    最大匹配数

   from   全局变量,from[i]表示最大匹配图中与左边点i相连的边 

【代码】

//输入:
const  int MAXN = 555; // 数组长度
int n = 200; //n表示左侧的点数
vector <int> g[MAXN];  // 表示与左边点i相连的右边点//输出:
int from[MAXN];//表示最大匹配中与左边点i相连的边
int tot;  // 二分图最大匹配数bool use[MAXN]; // 左边点的使用标记//匈牙利算法 模板题 ,match和hungary见小红书ACM国际大学生程序设计竞赛 算法与实现
bool match(int x){for(int i = 0;i < g[x].size(); ++i){if(!use[g[x][i]]){use[g[x][i]] = true;if(from[g[x][i]] == -1 || match(from[g[x][i]])){from[g[x][i]] = x;return true;}}}return false;
}int hungary(){tot = 0;memset(from,255,sizeof(from));for(int i = 1;i <= n; i++){memset(use,0,sizeof(use));if(match(i)) ++tot;}return tot;
}

这个我打算写给自己写题学习时用的,发出来供大家参考。

样题:http://www.cnblogs.com/zhangjiuding/p/7538564.html

【模板】匈牙利算法 二分图最大匹配题模板相关推荐

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

    前置知识 一张图是二分图,当且仅当它的点可以被分成两部分,而这张图上的所有边的两个端点,都分属不同的部分.我们称这两个点集,一个叫左部,一个叫右部.左部中的点叫左部点:右部中的点叫右部点. 一张图的一 ...

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

    踢以 给出多个点的坐标 有一种攻击 可以把一次干掉同一列的 或者干掉同一行的 求最少的攻击次数 肥西 由于问题是问选取最少的行和列干掉所有的陨石 可以把输入的r和c看成r和c之间有一条连边因为要实现干 ...

  3. 好教程推荐系列:力扣LeetCode官网/labuladong的算法小抄/漫画算法小灰/刷题模板

    LeetCode官网 https://leetcode.com/ https://leetcode-cn.com/ labuladong的算法小抄 刷算法全靠套路,认准 labuladong 就够了! ...

  4. hdu 4160 Dolls 匈牙利算法求最大匹配

    Dolls                                                                               Time Limit: 2000 ...

  5. nyoj239 月老的难题 (匈牙利算法,最大匹配,邻接表)

    题目239 题目信息 运行结果 本题排行 讨论区 月老的难题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. ...

  6. 51nod 2006 飞行员配对(二分图最大匹配) 裸匈牙利算法 求二分图最大匹配题

    题目: 题目已经说了是最大二分匹配题, 查了一下最大二分匹配题有两种解法, 匈牙利算法和网络流. 看了一下觉得匈牙利算法更好理解, 然后我照着小红书模板打了一遍就过了. 匈牙利算法:先试着把没用过的左 ...

  7. 【HDU - 2444】The Accomodation of Students(二分图判断 + 匈牙利算法求最大匹配)

    题干: There are a group of students. Some of them may know each other, while others don't. For example ...

  8. 染色法判定二分图 匈牙利算法

    染色法判定二分图 思路:相邻的点染不同颜色 看能不能染完 如果过程中出现相邻点相同颜色,就不可以 注意:需要遍历n个点 看此点是否被染色过 如果没有就进行一次dfs或bfs 二分图:可以把点分成两个集 ...

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

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

最新文章

  1. 创建第一个IOS项目
  2. 图像转置的MATLAB和OpenCV源码
  3. Centos7手动安装OpenStack Mitaka版本--KeyStone安装
  4. Day07-函数(2)
  5. PWM信号作用示例——调节台灯亮度
  6. Linux笔记-centos7配置网卡及iftop的使用
  7. 像孩童一样欣喜的看着自己的成长
  8. python下载文件传到服务器_python实现FTP文件传输(服务器端和客户端)
  9. codevs1380 没有上司的舞会
  10. 【滤波器】基于matlab GUI IIR数字滤波器设计【含Matlab源码 044期】
  11. Ubuntu下搭建UDK2018开发环境
  12. 异贝,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案推送。案例14
  13. 黑莓bold模拟器无法上网问题之解决
  14. 【论文解读 ICEIT2022】Heterogeneous Graph Based Knowledge Tracing基于异构图的知识追踪
  15. 智能硬件类产品测试项目总结
  16. 前缀,中缀,后缀表达式
  17. (百万字废话乱写+1小时2000字码字速度养成计划)网络支付与结算读书笔记1(20120720)...
  18. 1. 大数据实时计算介绍
  19. 远程命令/代码执行漏洞(RCE)总结
  20. 商家编号_caiji_004 机器人词库

热门文章

  1. 每日程序C语言29-将数组逆序输出
  2. Java黑皮书课后题第1章:1.1(显示三条消息)编写程序,显示Welcome to Java、Welcome to Computer Science和Programming is fun
  3. 【2012百度之星/资格赛】B:小诺爱USB设备
  4. 关于Linux的修复(重新引导)
  5. bzoj 2142 礼物
  6. Python字典和集合
  7. 洛谷.4383.[八省联考2018]林克卡特树lct(树形DP 带权二分)
  8. HDU1172猜数字 [模拟]
  9. SQL 学习与工作日常:语句积累
  10. HDOJ 1465 不容易系列之一 【错排公式 递推】