匈牙利算法分析和总结.docx

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

匈牙利算法(Edmonds算法)步聚:

首先用(*)标记X中所有的非M顶点,然后交替进行步骤(2),(3)。

选取一个刚标记(用(*)或在步骤(3)中用(yi)标记)过的X中顶点,例如顶点x

,如果x与y为同一非匹配边的两端点,且在本步骤中y尚未被标记过,则用(x)

i i i

去标记Y中顶点y。重复步骤(2),直至对刚标记过的X中顶点全部完成一遍上述过程。

i选取一个刚标记(在步骤(2)中用(xi)标记)过的Y中结点,例如y

i

,如果y

与x为

i同一匹配边的两端点,且在本步骤中x尚未被标记过,则用(yi)去标记X中结点x。重复步骤(3),直至对刚标记过的Y中结点全部完成一遍上述过程。

i

,(3)交替执行,直到下述情况之一出现为止:

标记到一个Y中顶点y,它不是M顶点。这时从y出发循标记回溯,直到(*)标记的X中顶点x,我们求得一条交替链。设其长度为2k+1,显然其中k条是匹配边,k+1条是非匹配边。

步骤(2)或(3)找不到可标记结点,而又不是情况(I)。

当(2),(3)步骤中断于情况(I),则将交替链中非匹配边改为匹配边,原匹配边改为非匹配边(从而得到一个比原匹配多一条边的新匹配),回到步骤(1),同时消除一切现有标记。

对一切可能,(2)和(3)步骤均中断于情况(II),或步骤(1)无可标记结点,算法终止(算法找不到交替链).

以上算法说穿了,就是从二分图中找出一条路径来,让路径的起点和终点都是还没有匹配过的点,并且路径经过的连线是一条没被匹配、一条已经匹配过交替出现。找到这样的路径后,显然路径里没被匹配的连线比已经匹配了的连线多一条,于是修改匹配图,把路径里所有匹配过的连线去掉匹配关系,把没有匹配的连线变成匹配的,这样匹配数就比原来多1个。不断执行上述操作,直到找不到这样的路径为止。

下面给出此算法的一个例子:

(1) 置M=空,对x-x

1 6

标记(*)。

11(2)找到交替链(x1,y)(由标记(x

1

1

),(*)回溯得),置M={(x

,y)}。

1121(3)找到交替链(x2,y2)(由标记(x

1

1

2

1

),(*)回溯得),置M={(x

,y),(x,y),}。

122

1

2

(4)找到交替链(x,y,x,y)(如图9.4所示。图中虚线表示非匹配边,细实线表示

3 1 1 4

交替链中非匹配边,粗实线表示匹配边),因而得M={(x,y),(x,y),(x,y)}。

2 2

3 1 1 4

(5)找到交替链(x,y)(由标记(x),(*)回溯得),置M={(x,y),(x,y),

4 3

4

2 2

3 1

(x,y),(x,y)}。

1 4

4 3

(6)找到交替链(x,y,x,y,x,y)(如图9.5所示,图中各种线段的意义同上),

5 4 1 1 3 7

因而得

M={(x2,y2),(x4,y3),(x5,y4),(x1,y1),

(x3,y7)}

下面是几个练习题::8080/acmhome/problemdetail.do?method=showdetailid=13871387GuardianofDecency

题目给出一些boy和girl,有一些规则他们在一些条件下可能恋爱,求最多有多少人,他们之间不会恋爱,根据这样的规则构建一个二分图:boy和girl分两边,分别作为左右结点,根据规则如果满足可能恋爱的条件就连接,否则不连接,求出最大匹配,N-max_number_of_couples即为要求的结果。

实现代码:#includeiostream#includestring#includecmathusingnamespacestd;typedefstruct{

charsex;stringstr;intheight;

stringsports;

}People;

Peoplep[505];intn;

intpx[505],py[505];intmap[505][505];intflag[505];

intcheck(inti,intj){

if(abs(p[i].height-p[j].height)=40p[i].sex!=p[j].sexp[i].pare(p[j].str)==0p[i].pare(p[j].sports)!=0)return1;

return0;

}

文档评论(0)

hao187 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档