贪心算法之——黑白点的匹配(两种实现方法)

博客探讨了如何使用贪心算法解决黑白点的最大匹配问题。首先介绍了问题背景,然后阐述了通过最大匹配算法和图遍历(DFS、BFS)来解决此问题的思路。内容包括将黑白点转化为图,构建邻接矩阵,并通过具体流程演示了DFS方法如何找到最大匹配对数。
摘要由CSDN通过智能技术生成

一、题目

设平面上分布着n个白点和n个黑点,每个点用一对坐标(x, y)表示。一个黑点b=(xb,yb)支配一个白点w=(xw, yw)当且仅当xb>=xw和yb>=yw。

若黑点b支配白点w,则黑点b和白点w可匹配(可形成一个匹配对)。

在一个黑点最多只能与一个白点匹配,一个白点最多只能与一个黑点匹配的前提下,求n个白点和n个黑点的最大匹配对数。

 

二、解题思路

  一看完题目,一开始的思路是先将黑白点分别存入两个数组中,再对两个数组分别进行对x和对y的排序,在实际实验过程中,发现排序完后数组的下标与点不好对应,这样就不容易确定一个点是否已经匹配过。

  经过了解查阅后发现了最大匹配问题的算法,和本题类似,而且递归的操作复杂度远小于多次对数组的排序。

  而且过多的排序也造成了算法思路难以理清。决定先学习掌握最大匹配度算法再考虑本题…

  在查阅了最大匹配度问题的思想后,发现这是一种递归形式的方法,算法需要基于对二分图的遍历算法,这就需要学习DFS或者BFS,所以又去复习了一下这两个算法,在彻底掌握了之后终于可以步入正题了…

(dfs和bfs的执行动态图

http://5b0988e595225.cdn.sohucs.com/images/20171101/f1f45fe9ca37425ba200180be89624b2.gif

http://5b0988e595225.cdn.sohucs.com/images/20171101/a85c0716fcc847f1915dddfcfd019c01.gif

 

理解了最大匹配算法后,发现只要在图遍历的基础上,多借助一个matching数组,用来储存各匹配点之间的联系,通过一些剪枝和判断就可以实现。

我选择了DFS进行最大匹配算法的基础算法,DFS是对图做出处理,在空间上需要借助一张邻接矩阵,我的想法是将黑白点问题化作图,再根据题目的要求做出对应的邻接矩阵,这样再通过最大匹配就可以求解出来。

 

下面主要针对这两个问题讨论并通过具体例子演示最大匹配核心思想。

1、如何将黑白点化作图:

创建一个结构体

 

黑白点都看作顶点,只通过color进行区别

2、如何求对应邻接矩阵:

       对储存所有顶点的结构体数组做两次循环,若满足题目中黑点xy坐标大于白点,即将邻接矩阵该位置置为1。

3、具体流程演示:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值