二分图的最大匹配问题完整代码

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

二分图的最大匹配问题很多博客原理讲的已经很清楚了,贴出来几个链接:

二分图的最大匹配问题解决原理

二分图最大匹配原理


自己花了两天时间敲出来的代码,感觉成长了很多:

#include <bits/stdc++.h>
using namespace std;

int n, m;//n代表图的点数, m代表边数
int len;//用来记录一条增广路径
const int maxn_node = 1e2+5;
bool mp[maxn_node][maxn_node];//记录图的连通性
bool book[maxn_node];//从每个节点遍历是看是否经过,记住在遍历的开始一定要设置初始点为已遍历对象,否则会出现首位相接的错误
int match[maxn_node];//匹配的边
vector<int> record;//记录一条可能是增广路径的路径其中有的元素被记录了两次,因此不是最终的路径
int path[maxn_node];//record路径的筛选形成可判断的路径

bool dfs(int u){
    for(int i=1; i<=n; i++){
        if (i == u) continue;
        if(!book[i] && mp[u][i]){
            book[i] = true;//表示改点已经被经过了,为dfs()创造条件
            if(match[i] == 0 || dfs(i)){//dfs()终止的条件是找到首位都为0
离散数学第三话——二分图最大匹配 离散数学第三话:判断二分图最大匹配 今天给大家分享的是离散数学二分图最大匹配算法的代码实现。这里选择匈牙利算法进行实现。该算法核心思想为:设该二分图将节点分为V1,V2,从V1节点中选择节点与V2节点匹配,(有边则匹配),若为初次匹配,则直接匹配,若V2中的点已被匹配,则先将原来的节点取消匹配并为其寻找新匹配点。若寻找成功,则更新匹配状态。基于上述思想,现将相关C++代码实现如下: #include<iostream> #include<vector> bool Search( 阅读详情

相关推荐

求解分配问题(三) 二分图最小权重匹配

ddd

wangzhenyang2的博客 6246

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

代码二分图最大匹配(匈牙利算法)

2301_77869606的博客 260

二分图最大匹配算法

二分图指的是这样一种图,其所有顶点可以分成两个集合X和Y,其中X或Y中任意两个在同一集合中的点都不相连,所有的边关联在两个顶点中,恰好一个属于集合X,另一个属于集合Y。给定一个二分图G,M为G边集的一个子集,如果M满足当中的任意两条边都不依附于同一个顶点,则称M是一个匹配。图中包含边数最多的匹配称为图的最大匹配

【第二十四课】二分图:acwing-860染色法判定二分图 / acwing-861二分图最大匹配 ( c++代码 )

我这里按照图中说一下:比如1号点最开始应该直接匹配的是4号点,但是在对3号点进行匹配的时候,我们发现3号点只能与1号点匹配,于是我们就想让1号点再找找有没有其他可以选择的(3号点只有1号,只好让1号点变一变啦),发现1号点还可以与6号点匹配,那这样就皆大欢喜啦,我们多了一个匹配数。,由于环的长度是奇数,环的最后一个节点又必须与环的起始节点相连,且它们属于同一个集合,这与二分图的定义相矛盾。3-c作为染色,是因为我们这里用1 2分别表示染成的两种不同的颜色,而3-c刚好能够得到与前一个点的c不同的颜色。

Swillow_的博客 1049

二分图最大匹配

欢迎大家访问我的博客:博客传送门 二分图最大匹配 题目描述 二分图最大匹配 从题目中给出的二分图匹配的定义可知,匹配其实也是一张图,并且图中的点数是边数的2倍。 如下图所示:二分图匹配 红色边组成的 4 个结点、2条边就是这个二分图的一个匹配了; 二分图最大匹配定义:最大匹配就是找到一个子图,满足是匹配,并且边数(点数)最多。 如下图所示:二分图最大匹配 匈牙利算法 匈牙利算法可以用来求解二分图最大匹配问题。匈牙利算法也被戏称为“相亲算法”,它的大致过程是这样的: 有两个点集,分别

qq_45832461的博客 584

最大二分图匹配的C++代码实现

最大二分图匹配是典型的图论问题,一般有两种做法,一种是运用最大流的思想,不过这种方法效率太低,为O(VE^2),没有利用好二分图的特殊性质。另一种做法是匈牙利 算法,这种方法也是利用了增益路径的思想,但这种方法充分利用了二分图的性质,所以效率也是比较高的,为O(VE),而且还能进一步降低,不过我没有做那种优化,下面就是我 的代码: #include #include #inclu

alop or 导演 的专栏 2417

C++ 图论二分图最大匹配(匈牙利算法)

一个点去匹配,如果别的点占用了它的一条……快来瞅瞅吧!

weixin_66767924的博客 800

二分图最大匹配算法

二分图的概念:二分图是图中的一种特殊模型,如果图的顶点v可以分割成两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则该图G成为一个二分图二分图如下: 本文通过一个问题来引出二分图最大匹配算法 。以素数伴侣的题目为例:若两个正整数的和为素数,则这两个数称为素数伴侣,设计程序从已有的N个正整数中挑出若...

田小呆的博客 2万+

二分图最大匹配【匈牙利算法】

https://www.acwing.com/problem/content/description/863/ 题意: 给定一个二分图,其中左半部包含n1个点(编号1~n1),右半部包含n2个点(编号1~n2),二分图共包含m条边。 数据保证任意一条边的两个端点都不可能在同一部分中。 请你求出二分图最大匹配数。 匈牙利算法 ::男女配对,最大红线数 枚举每个男生,如果找到匹配,res++...

谁是凶手1703 192

POJ 1469 二分图最大匹配

思路:裸的二分图最大匹配,居然没看出来,我还是要学习一个 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 #include<cstdlib&...

106

poj 2446 poj 1469 poj 1274 二分图最大匹配

题意: 给一张m * n的图,其中挖掉一些点,然后用1*2的小纸片来覆盖这张图,问能否将这个图覆盖。 如下图: 解析: 将每个不为挖掉的点视为二分图的X点集,这个点的四个方向上的点视为Y点集,此时最大匹配数即为点的个数(想一想为什么)。 因为有重复匹配 1和2                              2和1 这题用一个id数组来处理每个点的id,然后用匈牙利

渐近自由 441

P3386 【模板】二分图最大匹配(匈牙利算法模板)

题目链接:点击这里 题目大意: 给定一个二分图,其左部点的个数为 nnn ,右部点的个数为 mmm ,边数为 eee ,求其最大匹配的边数。 题目分析: 本题使用的匈牙利算法完成的二分图最大匹配 具体细节见代码: // Problem: P3386 【模板】二分图最大匹配 // Contest: Luogu // URL: https://www.luogu.com.cn/problem/P3386 // Memory Limit: 512 MB // Time Limit: 1000 ms // //

羊驼的博客 369

洛谷P3386 [模板]二分图最大匹配(网络最大流)

题目链接 题目描述 给定一个二分图,其左部点的个数为 nnn,右部点的个数为 mmm,边数为 eee,求其最大匹配的边数。 左部点从 111 至 nnn 编号,右部点从 111 至 mmm 编号。 输入格式 输入的第一行是三个整数,分别代表 nnn,mmm 和 eee。 接下来 eee 行,每行两个整数 u,vu, vu,v,表示存在一条连接左部点 uuu 和右部点 vvv 的边。 输出格式 输出一行一个整数,代表二分图最大匹配的边数。 输入 #1 1 1 1 1 1 输出 #1 1 输入 #2 4 2

WTMDNM_的博客 246

洛谷 P3386 【模板】二分图匹配 匈牙利算法或最大

https://www.luogu.org/problemnew/show/P3386 题目背景 二分图 感谢@一扶苏一 提供的hack数据 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 输出格式: 共一行,二分图最大匹配...

xiji333的博客 433

浅谈二分图最大匹配

二分图最大匹配这个话题,前几期日报都有提过,但讲的不太详细,我在本文详细的说一下。 首先,让我们看一个例子。 昨天,小K和小L以及他们的朋友跑去游乐场坐过山车,每两人坐一排。每个人都想和一些人一起座,小K被吵得心烦意乱。今天,他决定再次邀请朋友坐过山车,他给出了每人想要一起坐的人,希望你计算最大匹配。 这就是一个经典的二分图最大匹配。 那我们怎么办呢?不急,我们先手动模拟。 再给出的条件中,人们...

cccxhr的博客 197

HDU - 2444 The Accomodation of Students (二分图判定,二分图最大匹配

题意:给出编号范围为N的人,然后再给出编号a b 之间有认识的关系。给出m组这样的关系,然后让你分出两组使得每组中每个人互相都不认识(认识关系没有间接性),如果能分组的话,就将两个认识人放到一个房间中,求最多需要的房间数思路:以前做过并查集关于分组的题所以首先想用并查集来试一下(并查集分组是开两倍的数组)但是自析想想并查集分的时候实际上是有间接关系的,同时也不能判断怎样分配房间然后就学习...

172

洛谷P3386 :【模板】二分图匹配

https://www.luogu.org/problemnew/show/P3386 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 输出格式: 共一行,二分图最大匹配 输入输出样例 输入样例#1: 复制 1 1 ...

323

1.飞行员配对 二分图匹配(输出方案)/最大流斩

构建二分图,新建超级源汇点,所有边权为1,跑一次dinic,最大流即可最大匹配,关键是方案输出,遍历所有边(除去关于s,t的边),满流的边即可一组匹配。 #include #include #include using namespace std; int n,m;int nume;int e[10000][3];int head[105]; const int inf=0x3f3f3f3f;

天羽屠龙舞 1222

二分图最大匹配——总结

刷了一些二分图最大匹配的题,记录一些心得。 二分图最大匹配最常见也是用到的最多的还是匈牙利算法。 匈牙利算法 先找到这个点对应的可以匹配点,然后以次判断,它所匹配的点,如果找到一个未匹配的,那就和它匹配,如果匹配过了,就判断这个已经匹配过的能不能腾开,也就是说给要匹配的数让出位置。 举例说明下:假设X是要匹配的数,然后现在找到了Y和X可以匹配,如果Y没有和别的数匹配的话,那就很好办了,直接让...

HANGANG的博客 328
上一篇: PAT.1063A(set问题)
下一篇: map的个人理解
bbtl_ast
博客等级 码龄10年 22粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值