网站大量收购闲置独家精品文档,联系QQ:2885784924

图论的基本算法.ppt

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

图论 朱全民 图 图的概念 G=(V,E) 图的基本概念 有向图、顶点、入度、出度、弧、环 无向图、边、路径、顶点的度、邻接 简单图、完全图 平面图、二分图 图的存储结构 邻接矩阵 graph=Record vex:array[1..vtxptr] of vertex; arc:array[vtxptr, vtxptr] of vertex; 邻接表 表节点 type arcptr=^arcnode; arcnode=record adjvex:vtxptr; nextarc:arcptr; info: … {和弧有关的其他信息} end; vex=Record vexdata: …{和顶点有关的其他信息} firstarc:arcptr; end; adjlist=array [vtxptr] of vexnode; 拓扑排序 网线从机房连接到办公室 在机房,所有网线从左到右编号为1,2,3,…,N 给出每两条线是否交叉的信息,请计算办公室内从左到右各条线的编号 求拓扑序列 FUNC toporder(var dig:adjlisttp):boolean; init(top2); m:=0; ve[1..n]:=0 while Not empty(top1) do [ j:=pop(top1); push(top2,j); m:=m+1; k:=firstadj(dig,j); while k0 do [ 入度(k):=入度(k)-1; if 入度(k)=0 then push(top1,k); if ve[j]+dut(j,k)ve[k] then ve[k]:=ve[j]+dut(j,k); k:=nextadj(dig,j,k) ] ] if mn then return(false) else return(true); endF; 拓扑排序 核心问题:给一些序关系,排出全序! 一个一个排 先排最大 然后第二大… 具体实现? 每次取0出度点 枚举所有点吗? 0出度只可能是1出度变来的! O(n+m) 欧拉道路和回路 经过每条边一次且仅一次 先看回路 必要条件:所有点度为偶数 充分条件:还是“所有点度为偶数” 证明! 把欧拉回路构造出来 “圈套圈” 可能套不出来吗?想一想 欧拉道路和回路 有向的情形 入度 = 出度 如何套圈? 道路 有两个奇度点 正好是起点和终点 哪个是起点,哪个是终点? 有向+无向怎么办? 网络流!不要求掌握 怎样找欧拉回路 幼儿园里有很多房屋 房屋与房屋之间连以走廊 走廊与房屋之间有一扇门 幼儿园长想把门漆成绿色或者黄色,使得 任意一条走廊两头门的颜色不同 任意一间房屋上的门,绿色门的数量与黄色门的数量相差不超过1。 如何实现? 分析 如果每个房屋的门为偶数,那么幼儿园本身就是个欧拉回路。 那么,如果从房屋踏上走廊,门被漆成绿色;从走廊踏进房屋,门被漆成黄色。由于走廊只走一次,因此,每间房屋进出的次数一样,因此,任意一间房屋的门,绿色门和黄色门的数量一样。 如果门的数量为奇数,那么要对幼儿园门进行改造,要使得门数量为奇数的房屋为偶数个,将这样的房屋两两配对,并在新增加的门之间虚设一条走廊,这样幼儿园就成为了欧拉回路。 然后按规律给门油漆,然后撤去所有虚设的走廊和门,由于被撤去的房屋的门最多只有一个,所以同样保证绿色门的数量和黄色的门的数量相差不超过1。 另一个例子 考古学家发现了一块布,布上做有针线活,叫做“十字绣” 交替地在布的两面穿线 布是一个n×m的网格 线只能在网格的顶点处才能从布的一面穿到另一面。 每一段线都覆盖一个单位网格的两条对角线之一 而在绣的过程中,一针中连续的两段线必须分处布的两面 给出布两面的图案(实线代表有线,虚线代表背面有线) 最少需要几针才能绣出来? 一针是指针不离开布的一次绣花过程。 例如图(b)的图案最少需要4针。 分析 抽象成图 网格交叉点:顶点 正面的线:正边 背面的线:负边 有边相连:连通块 每个连通块分别求 对于某个顶点i |正边数-负边数|=K0时 以该顶点为开始或结束的针数=K 可以恰好为K针 所有K值加起来,除以2(每一针有两个端

文档评论(0)

zyzsaa + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档