二分图完美匹配算法——C语言实现

本文介绍了二分图的概念以及如何找到二分图的最大匹配。通过算法描述和C语言代码实现,展示了如何在二分图中寻找边数最多的匹配,即最大匹配,并给出了代码运行结果。
摘要由CSDN通过智能技术生成

二分图

二分图是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点 i 和 j 分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。

如下图所示,区别一个图是否是二分图的关键在于,它的点集是否可以被分成两个独立的点集。

左图为一个二分图,右图不是一个二分图。

二分图的最大匹配

二分图G=(V,E)中边的子集M,如果M中任意两条边,都不存在公共顶点,那么称M为该二分图的一个匹配。边数最多的匹配M称为二分图的最大匹配,也叫完美匹配。

用于二分图匹配的匈牙利算法| Comzyh的博客

如图所示,蓝色的边就是该二分图的一个匹配,并且这个二分图不存在数量多于三条的匹配M',所以这个匹配是该二分图的一个最大匹配。

二分图的最大匹配算法

算法描述

左顶点记为a,右顶点记为b,给定一个匹配M

step1:a中不与M关联的顶点做标记(※),程序中用数组A表示,A=“0”:未标记,A=“1”:标记为(※),A=“2”:标记并处理

step2:如果在上一步中没有新的标记点标记到a上(即数组A中不存在“1”),则算法结束,否则进入step3

step3:如果a中有被标记但未被处理的点a[x](即数组A[x]=“1”),将其标记为已处理(即A[x]</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值