二分图匹配匈牙利算法DFS实现
1 /*==================================================*\ 2 | 二分图匹配(匈牙利算法DFS 实现) 3 | INIT: g[][]邻接矩阵; 4 | CALL: res = MaxMatch (); 5 | 优点:实现简洁容易理解,适用于稠密图,DFS 找增广路快。 6 | 找一条增广路的复杂度为O(E ),最多找V 条增广路,故时间复杂度为O(VE) 7 \*==================================================*/ 8 const int MAXN = 1000; 9 int uN, vN; // u, v 数目,要初始化!!! 10 bool g[MAXN][MAXN]; // g[i][j] 表示xi与yj相连 11 int xM[MAXN], yM[MAXN]; // 输出量 12 bool chk[MAXN]; // 辅助量检查某轮y[v]是否被check 13 bool SearchPath(int u) { 14 int v; 15 for (v = 0; v < vN; v++) 16 if (g[u][v] && !chk[v]) {//如果u到v是相连的,且v还没有用 17 chk[v] = true; 18 if (yM[v] == -1//第一次,用到了短路计算,否则SearchPath(-1)会出问题 19 || SearchPath(yM[v])) { 20 yM[v] = u; 21 xM[u] = v; 22 return true; 23 } 24 } 25 return false; 26 } 27 int MaxMatch() { 28 int u, ret = 0; 29 memset(xM, -1, sizeof(xM)); 30 memset(yM, -1, sizeof(yM)); 31 for (u = 0; u < uN; u++) 32 if (xM[u] == -1) {//u还没有匹配过 33 memset(chk, false, sizeof(chk));//保证每次都置成false 34 if (SearchPath(u)) 35 ret++; 36 } 37 return ret; 38 }
引用Matrix67的一段关于匈牙利算法的经典通俗解释:
研究了几个小时,终于明白了。说穿了,就是你从二分图中找出一条路径来,让路径的起点和终点都是还没有匹配过的点,并且路径经过的连线是一条没被匹配、一条已经匹配过,再下一条又没匹配这样交替地出现。找到这样的路径后,显然路径里没被匹配的连线比已经匹配了的连线多一条,于是修改匹配图,把路径里所有匹配过的连线去掉匹配关系,把没有匹配的连线变成匹配的,这样匹配数就比原来多1个。不断执行上述操作,直到找不到这样的路径为止。
转载于:https://www.cnblogs.com/kakamilan/archive/2012/07/13/2590784.html
二分图匹配匈牙利算法DFS实现相关推荐
- nyoj-239 月老的难题 (二分图匹配—匈牙利算法 网络流—Dinic算法)
月老的难题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. 现在,由于一些原因,部分男孩与女孩可能结成幸福的一 ...
- 二分图匹配--匈牙利算法
文章目录 二分图: 匹配 匈牙利算法 代码: 二分图: 二分图是一个无向图,点集分成子集X和Y,图中每一条边都是一边在X一边在Y 当且仅当无向图G的每一个回路次数都是偶数时(包括0),G就是一个二分图 ...
- 二分图匹配——匈牙利算法
匈牙利算法 什么是匈牙利算法 匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法,并推动了后来的原始对偶方法.美国数学家哈罗德·库恩于1955年提出该算法.此算法之所以被称作匈牙利算法,是因 ...
- 二分图匹配-匈牙利算法
说到二分,我们就很容易想到二分查找算法,今年下半年--,今天所介绍的二分图和二分查找没有太大的联系,我们先来看一下它的定义: 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图 ...
- Codevs 1222 信与信封问题 二分图匹配,匈牙利算法
题目: http://codevs.cn/problem/1222/ 1222 信与信封问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 ...
- 【CF1139E】Maximize Mex - 二分图匹配 - 匈牙利算法
[题目链接] https://www.luogu.com.cn/problem/CF1139E [题目描述] 有n个学生,第i个学生在俱乐部c_i,并拥有一个能力值a_i.在接下来的d天中,每天会有一 ...
- HDU 2063 过山车 二分图匹配 匈牙利算法
过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 二分图匹配----匈牙利算法之二
poj 1469 COURSES //题意:现在有p门课程和n个学生,现在需要有由p个学生组成的组织,该组织满足每个学生代表一门课程以及每门课程只能由一个学生代表, //现给出每门课程都有哪些学生可以 ...
- 二分图的匹配——匈牙利算法
什么是匹配 匹配:在图论中,一个「匹配」是一个边的集合,其中任意两条边都没有公共顶点. 最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配. 二分图的匹配:给定一个二分图G,在G ...
最新文章
- 矩阵快速幂+构造方法
- Android之系统自带的文字外观设置
- restful-api最佳实践
- 北京大学Tensorflow2.0笔记
- 【Scikit-Learn 中文文档】支持向量机 - 监督学习 - 用户指南 | ApacheCN
- 白话SOA:面向服务+组件+架构
- Java关于中查询数据时,报错java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1的问题
- java public interface_Java 接口interface的基础
- 运行Map Reduce报错Got exception: java.net.ConnectException: Call From master.localdomain/127.0.0.1 to
- css实现毛玻璃效果——backdrop-filter
- 计算机文化学习笔记3
- html中打印部分内容,设置网页打印区域
- LaTeX入门级教程
- [学位]燕山大学中文学术期刊目录(2020修订版)
- 爬虫项目实战二:爬取起点小说网
- 搭建react项目并配置路由
- webview的java与js互操作
- 关于网络推广的一些心得体会
- 华为云构建云原生DevSecOps平台,保障软件供应链全流程安全可信
- flv转换成mp4格式最简单方法