- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一般图的匹配一般图的匹配
先来回忆一下我们的匈牙利算法,它是通过DFS找出了一颗“匈牙利树”。我的画图不好请 见谅,图中的直线是有边相连,而折线是匹配边。匈牙利树就是这样一颗交错的树。接着,我们把树上的所有点都分成内点和外点,(奇数为内点,偶数为外点)。每次搜索,我们都是从一个外点(一个非饱和的顶点)出发去搜索。显然若增广树的树叶又连着一个非饱和点,可以看成内点,就可以翻转该路径一个很显然的问 题是:在DFS的过程中,会不会出现圈呢?当然会,但这些圈是可以被忽略的。请看下图,因为二分图的特殊性,圈的出现一定是从一个外点连到内 点。二分图中某点存在一个回路则该回路一定是偶圈,即任以一个点为树根的增广树中,每个点要么是内点,要么是外点,因为唯一能改变其内外点性质的只能是存在回路,若是偶圈显然也不会影响但这并无影响, 因为在这个圈必然是偶数条边,换句话说,圈里本来是内点的点还是内点,本来是外点的点还是外点,因此这个圈是没有作用的。这就是匈牙利算法为什么是正确的。?但在一般图中, 就没有这么简单了。来看这个图,1点和2点都是外点,但它们之间却有一条边,这就出现了问题,因为这个圈含有的边数是奇数条!为什么在增广树中出现一个点既是外点又是内点有问题?在二分图中任意一棵增广树中一个点的内外性已确定,因而从树根出发增广路的有无也是确定的,但是在一般图中出现了一个点既是外点又是内点,显然此时增广路还未搜索到,否则已经完成了此次增广路的搜索,那么对之后的搜索会发生错误,因为之后的点不能再确定为内外,必须采取某种措施使得以后的点内外性一致这就是说,在圈上的点(除了跟之外),既是外点也是内点!就是说,本来我们是不能去从那些内点出发去搜索的,但现在可以了,因为只要从圈的另外一边 走过来它就是外点了。搜索时采用广搜的方法寻找增广路径,而且与顶点之间的标号顺序有关首先从1开始广搜1-2,1-3,先找到2就有匹配边1-2后2是饱和点就跳过,3-1,3-2标记增广树的父节点3-1-2发现遇到了奇圈,就把整个奇圈收缩成一个花所谓的带花树算法就是,把整个圈缩成一个点,Edmonds称这个超级点为“花”,就是说,原圈里的所有点都作为外点,然后继续搜索。再之后的过程中,已经被缩的点还可能被嵌套地收缩。当我们找到一条增广路之后,还要把路上的“花”展开。?总之,带花树的算法思想就是缩点-继续找增广路-找到之后把花展开。这个算法的思想并不难理解、难的是实现。这是网上搜到的Amber写的URAL 1099的程序,我看了很久终于看懂了,我想我也写不出更好的。标程就用他的吧。算法的大体是一个BFS,因为我们在缩点会有一些内点变成外点,因此用BFS更容易把这些点加入到搜索序列中。缩点时所有点都相当于外点程序里别的没什么,难点就是对“花”的操作。用base[i]表示点i属于哪朵花,这是很精髓的一点就是用到了并查集的思想:把跟作为一个集合的表示。因为虽然有很多圈,但在缩点之后,仍然是一棵树,一棵带着花的树,因此做的时候还是当成树去做。下面开始解释程序:当外点u搜到了外点v之后,要进行BlossomContract先找到u和v的CommonAncestor,找到u和v的最近的公共祖先(外点),这个公共祖先就是这朵新花的跟,然后对u和v分别进行ResetTrace,从u和v出发一路往上走到公共祖先的地方,即以u,v分别作为内点向上走,将原来所有的外点作为补圈的内点边走边把匈牙利树中有向的父子关系改成无向的,但要注意和跟所在花里的点的父子关系不能是无向的。不然会出现绕圈子死循环的情况。同时把路上经过的花也记录下来,把它们的base设成新的公共祖先,做成一朵新的花。最后把u,v之间的父子关系改成无向,同样和跟所在花里的点的父子关系不能是无向的,理由同上。花中任何一点和根不能是无向的关系,即发生两点互指的情形,内部是两点互指的。匹配边10-9,1-2,3-4,5-6,7-8从11开始增广后一旦找到奇圈,则将奇圈所有的点都看成外点,那么凡是同奇圈相连的点都可以开始搜索,例如和1,2,3,4,5,6,7,8相连的点都行13-5-6-7-8-4-3-2-1-9-10-11构成一条增广路,通过补圈改变了后续的内外性质,和原来的从源点都花根的内外性一致,14-6-5-9-10-11构成一条增广路,仍然采用原来从源点到花根的内外性#include iostream usingstd:: cin;usingstd:: cout;usingstd:: endl;intg[250][250], match[250], inque[250], finish, que[250], head, tail, father[250], n, base[250], inblossom[250],ans;//base[i]表明i属于那朵花,并查集int
您可能关注的文档
- Landsat TM 影像处理最完整流程Landsat TM 影像处理最完整流程.docx
- LC 串并联谐振回路特性实验LC 串并联谐振回路特性实验.docx
- LG-W-08 钻完井钻修机组作业指导书LG-W-08 钻完井钻修机组作业指导书.docx
- linux0.11系统调用原理及实验总结linux0.11系统调用原理及实验总结.docx
- Linux下创建、删除文件和文件夹命令Linux下创建、删除文件和文件夹命令.docx
- Linux下Oracle的安装心得Linux下Oracle的安装心得.docx
- linux 磁盘配额 配置 过程linux 磁盘配额 配置 过程.docx
- linux下的redmine搭建linux下的redmine搭建.docx
- linux基础复习ch6linux基础复习ch6.docx
- Linux用户认证方法及PAM介绍Linux用户认证方法及PAM介绍.docx
- 强化训练青岛版8年级数学下册《实数》综合测评试卷(含答案详解版).docx
- 强化训练青岛版9年级数学下册《事件的概率》定向测评试题(详解).docx
- 综合解析青岛版8年级数学下册《实数》专题测试试卷(详解版).docx
- 强化训练青岛版8年级数学下册《实数》章节测试试卷(含答案详解版).docx
- 综合解析青岛版8年级数学下册《实数》单元测评试卷.docx
- 强化训练-青岛版8年级数学下册《实数》章节测评试题(解析版).docx
- 强化训练青岛版9年级数学下册《事件的概率》专项测评试题(详解版).docx
- 强化训练青岛版8年级数学下册《二次根式》专题攻克试卷(含答案详解).docx
- 强化训练青岛版8年级数学下册《实数》综合训练试卷(含答案详解).docx
- 综合解析青岛版8年级数学下册《实数》定向测试练习题(含答案解析).docx
文档评论(0)