二分图匹配及其应用【信息技术】.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二分图匹配及其应用 例题1 棋盘的覆盖 一张普通的国际象棋棋盘 8*8 = 64 格中被删除了一些格子 使用1*2 的多米诺骨牌进行覆盖 求最大覆盖的格数和方案 例题1 思路 染色 建图 性质 最大匹配和完美匹配 基本概念 点集分为互补的两个集合 基本定理 判定定理: 一个图为二分图的充要条件是其所有回路均为偶数长。 如何判断一张图是否为二分图,并对节点进行正确的划分呢? 二分图的判断问题 染色法 将节点用黑白两种颜色染 实现:深度优先搜索 二分图判断问题解答1 var visited: array[1..100] of integer; data: array[1..100][1..100] of integer; n: integer; success: boolean; 二分图判断问题解答2 procedure dfs(which, color:integer); var i: integer; begin if not success then exit; if visited[which] 0 then begin if visited[which] color then success = false; exit; end; visited[which] := color; for i:=1 to n do if data[which][i] 0 then dfs(i, 3-color); end; 二分图判断问题解答3 function judge:boolean; var i: integer; begin success := true; for i:=1 to n do if visited[i] = 0 then dfs(i,1); judge := success; end. HALL 定理 二分图,存在完美匹配的充分必要条件是,对于任意一个顶点集合的子集A,它的相邻点构成的邻集X(A),都满足以下条件: HALL 定理 证明 必要性 充分性 例题2 HALL定理的应用 构造N*N的矩阵,使得每行都有1到n每个数字出现一次且仅一次,每列都有1到n每个数字出现一次且仅一次 例题2 思路 每次构造一行 循环n次构造n行 建图 如何证明? 例题3 思考题 N为奇数,M=(N-1)/2,由组合数学知: 因为M+M+1 = N 例题3 思考题 现将所有的从n个数里取m个数的组合构成一个集合A 将所有的从n个数里取m+1个数的组合构成另一个集合B 这两个集合是否存在着一一映射的关系? 使得A中的每个元素a都对应到B中的元素b,且a为b的一个子集? 例题3 思考题解答 建图 找完美匹配 如何证明? 增广路和匈牙利算法 增广路(交错轨)的概念 匈牙利算法:找增广路 如何找?算法选择? 增广路和匈牙利算法 实例1 增广路和匈牙利算法 实例2 找增广路的两种办法 广度优先搜索 深度优先搜索 广度优先算法程序 var data: array[1..100,1..100] of integer; match1,match2: array[1..100] of integer; n:integer; 广度优先算法程序 function bmatch:integer; var i,r:integer; begin for i:=1 to n do r := r + find(i); bmatch := r; end; 广度优先算法程序 function find(s:integer):integer; var i,j, d,t, qh,ql:integer; father2,queue1:array[1..100] of integer; begin fillchar(father2,sizeof(father2),0); queue1[1] := s; qh := 1; ql := 1; 广度优先算法程序 while (qh = ql) do begin for i:=0 to n do begin if (father2[i]0) or (data[queue1[qh]][i]=0) then continue; if (match2[i]0) then begin

文档评论(0)

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

1亿VIP精品文档

相关文档