




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章图7 1抽象数据类型图的定义ADTGraph 数据对象V V是具有相同特性的数据元素的集合 称为顶点集 数据关系R R VR VR v w V且P v w 表示从v到w的弧 谓词P v w 定义了弧的意义或信息 1 名词和术语有向图 无向图 网 子图弧头 弧尾 边完全图 稀疏图 稠密图邻接点 度 入度 出度路径 路径长度 回路简单路径 简单回路连通图 连通分量 强连通图 强连通分量生成树 生成森林 最小生成树 2 基本操作P 结构的建立和销毁 CreateGraph 对v赋值value 3 对邻接点的操作 FirstAdjVex G v 返回v的第一个邻接点 若该顶点 在G中没有邻接点 则返回 空 NextAdjVex G v w 返回v的 相对于w的 下一个 邻接点 若w是v的最后一个邻 接点 则返回 空 插入或删除顶点InsertVex 删除G中顶点v及其相关的弧 4 插入和删除弧InsertArc 从顶点v起广度优先遍历图 G 并对每个顶点调用函数 Visit一次且仅一次 5 7 2图的存储表示图的数组 邻接矩阵 存储表示 defineINFINITYINT MAX 最大值 defineMAX VERTEX NUM20 最大顶点个数typedefenum DG DN AG AN GraphKind 有向图 有向网 无向图 无向网 typedefstructArcCell VRTypeadj VRType是顶点关系类型 对无权图 用1或0表示相邻否 对带权图 则为权值类型 InfoType info 该弧相关信息的指针 ArcCell AdjMatrix MAX VERTEX NUM MAX VERTEX NUM typedefstruct VertexTypevexs MAX VERTEX NUM 顶点向量AdjMatrixarcs 邻接矩阵intvexnum arcnum 图的当前顶点数和弧 边 数GraphKindkind 图的种类标志 MGraph 6 图的邻接表存储表示 defineMAX VERTEX NUM20typedefstructArcNode intadjvex 该弧所指向的顶点的位置structArcNode nextarc 指向下一条弧的指针InfoType info 该弧相关信息的指针 ArcNode typedefstructVNode VertexTypedata 顶点信息ArcNode firstarc 指向第一条依附该顶点的弧 VNode AdjList MAX VERTEX NUM typedefstruct AdjListvertices intvexnum arcnum 图的当前顶点数和弧数intkind 图的种类标志 ALGraph 7 有向图的十字链表存储表示 defineMAX VERTEX NUM20typedefstructArcBox inttailvex headvex 该弧的尾和头顶点的位置structArcBox hlink tlink 分别指向下一个弧头相同和弧尾相同的弧的指针域InfoType info 该弧相关信息的指针 ArcBox typedefstructVexNode VertexTypedata ArcBox firstin firstout 分别指向该顶点第一条入弧和出弧 VexNode typedefstruct VexNodexlist MAX VERTEX NUM 表头向量intvexnum arcnum 有向图的当前顶点数和弧数 OLGraph 8 无向图的邻接多重表存储表示 defineMAX VERTEX NUM20typedefemnu unvisited visited VisitIf typedefstructEbox VisitIfmark 访问标记intivex jvex 该边依附的两个顶点的位置structEBox ilink jlink 分别指向依附这两个顶点的下一条边InfoType info 该边信息指针 EBox typedefstructVexBox VertexTypedata EBox firstedge 指向第一条依附该顶点的边 VexBox typedefstruct VexBoxadjmulist MAX VERTEX NUM intvexnum edgenum 无向图的当前顶点数和边数 AMLGraph 9 7 3图的遍历从图中某个顶点出发游历图 访遍图中其余顶点 并且使图中的每个顶点仅被访问一次的过程 一 深度优先搜索从图中某个顶点V0出发 访问此顶点 然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图 直至图中所有和V0有路径相通的顶点都被访问到 若此时图中尚有顶点未被访问 则另选图中一个未曾被访问的顶点作起始点 重复上述过程 直至图中所有顶点都被访问到为止 10 下列算法使用的全局变量 Booleanvisited MAX 访问标志数组Status VisitFunc intv 函数变量voidDFSTraverse GraphG Status Visit intv 对图G作深度优先遍历 VisitFunc Visit for v 0 v G vexnum v visited v FALSE 访问标志数组初始化for v 0 v G vexnum v if visited v DFS G v 对尚未访问的顶点调用DFS 11 voidDFS GraphG intv 从第v个顶点出发递归地深度优先遍历图G visited v TRUE VisitFunc v 访问第v个顶点for w FirstAdjVex G v w 0 w NextAdjVex G v w if visited w DFS G w 对v的尚未访问的邻接顶点w递归调用DFS 12 二 广度优先搜索从图中的某个顶点V0出发 并在访问此顶点之后依次访问V0的所有未被访问过的邻接点 之后按这些顶点被访问的先后次序依次访问它们的邻接点 直至图中所有和V0有路径相通的顶点都被访问到 若此时图中尚有顶点未被访问 则另选图中一个未曾被访问的顶点作起始点 重复上述过程 直至图中所有顶点都被访问到为止 13 voidBFSTraverse GraphG Status Visit intv 按广度优先非递归遍历图G 使用辅助队列Q和访问标志数组visited for v 0 v G vexnum v visited v FALSE InitQueue Q 置空的辅助队列Qfor v 0 v G vexnum v if visited v v尚未访问EnQueue Q v v入队列while QueueEmpty Q DeQueue Q u 队头元素出队并置为uvisited u TRUE Visit u 访问ufor w FirstAdjVex G u w 0 w NextAdjVex G u w if visited w EnQueue Q w u的尚未访问的邻接顶点w入队列Q 14 7 4最小生成树问题 假设要在n个城市之间建立通讯联络网 则连通n个城市只需要修建n 1条线路 如何在最节省经费的前提下建立这个通讯网 该问题等价于 构造网的一棵最小生成树 即 在e条带权的边中选取n 1条 不构成回路 使 权值之和 为最小 15 算法一 普里姆算法 可取图中任意一个顶点v作为生成树的根 之后若要往生成树上添加顶点w 则在顶点v和顶点w之间必定存在一条边 并且该边的权值在所有连通顶点v和w之间的边中取值最小 一般情况下 假设n个顶点分成两个集合 U 包含已落在生成树上的结点 和V U 尚未落在生成树上的顶点 则在所有连通U中顶点和V U中顶点的边中选取权值最小的边 记录从顶点集U到V U的代价最小的边的辅助数组 16 struct VertexTypeadjvex VRTypelowcost closedge MAX VERTEX NUM k LocateVex G u 顶点u为构造生成树的起始点for j 0 j G vexnum j 辅助数组初始化if j k closedge j u G arcs k j adj closedge k lowcost 0 初始 U u for i 0 i G vexnum i 在其余顶点中选择k minimum closedge 求出T的下一个结点 k printf closedge k adjvex G vexs k 输出生成树的边closedge k lowcost 0 第k顶点并入U集for j 0 j G vexnum j if G arcs k j adj closedge j lowcost closedge j G vexs k G arcs k j adj 新顶点并入U后重新选择最小边 17 算法二 克鲁斯卡尔算法 为使生成树上边的权值之和最小 显然 其中每一条边的权值应该尽可能地小 克鲁斯卡尔算法的做法就是 先构造一个只含n个顶点的子图SG 然后从权值最小的边开始 若它的添加不使SG中产生回路 则在SG上加上这条边 如此重复 直至加上n 1条边为止 18 算法 构造非连通图ST V k i 0 while k n 1 i 从边集E中选取第i条权值最小的边 u v 若 u v 加入ST后不使ST中产生回路 则输出边 u v 且k 一般来讲 由于普里姆算法的时间复杂度为O n2 则适于稠密图 而克鲁斯卡尔算法需对e条边按权值进行排序 其时间复杂度为O eloge 则适于稀疏图 19 7 5重 双 连通图和关节点问题 若从一个连通图中删去任何一个顶点及其相关联的边 它仍为一个连通图的话 则该连通图被称为重 双 连通图 图的双连通性对于表示通讯或运输的图来说 有着重要的意义 若连通图中的某个顶点和其相关联的边被删去之后 该连通图被分割成两个或两个以上的连通分量 则称此顶点为关节点 显然 没有关节点的连通图为双连通图 20 关节点的特征 假设从某个顶点V0出发对连通图进行深度优先搜索遍历 则可得到一棵深度优先生成树 树上包含图的所有顶点 若生成树的根结点 有两个或两个以上的分支 则此顶点 生成树的根 必为关节点 对生成树上的任意一个 顶点 若其某棵子树的根或子树中的其它 顶点 没有和其祖先相通的回边 则该 顶点 必为关节点 21 如何判别 1 设V0为深度优先遍历的出发点p G vertices 0 firstarc v p adjvex DFSArticul G v 从第v顶点出发深度优先搜索if count G vexnum 生成树的根有至少两棵子树printf 0 G vertices 0 data 根是关节点 22 2 对生成树上的顶点定义一个函数 low v Min visited v low w visited k 对顶点v 若 在生成树上 存在一个子树根w low w visited v 则顶点v为关节点visited v0 min count count计顶点访问次序for p G vertices v0 firstarc p p p nextarc w p adjvex w为v0的邻接顶点if visited w 0 w未曾被访问DFSArticul G w 返回前求得low w if low w visited v0 printf v0 G vertices v0 data 输出关节点elseif visited w min min visited w w是回边上的顶点 low v0 min 23 7 6两点之间的最短路径问题求从某个源点到其余各点的最短路径迪杰斯特拉推出了一个按路径长度递增的次序求从源点到其余各点最短路径的算法 假设图中所示为从源点到其余各点之间的最短路径 则在这些路径中 必然存在一条长度最短者 在这条路径上 必定只含一条 权值最小 弧 由此 只要在所有从源点出发的弧中查找权值最小者 24 长度次短的路径可能有两种情况 它可能是从源点直接到该点的路径 也可能是 从源点到a 再从a到该点其余依次类推 假设Dist k 表示当前所求得的从源点到k的最短路径显然 Dist k 或者 25 二 每一对顶点之间的最短路径从vi到vj的最短路径是以下各种可能路径中的长度最小者 若存在 则存在路径 vi vj 路径中不含其它顶点若 存在 则存在路径 vi v1 vj 路径中所含顶点序号不大于1若 vi v2 v2 vj 存在 则存在一条路径 vi v2 vj 路径中所含顶点序号不大于2 依次类推 则vi至vj的最短路径应是上述这些路径中 路径长度最小者 26 7 7拓扑排序 问题 假设以有向图表示一个工程的施工图或程序的数据流图 则图中不允许出现回路 如何检查有向图中是否存在回路的方法之一 是对有向图进行拓扑排序 何谓 拓扑排序 对有向图进行如下操作 按照有向图给出的次序关系 将图中顶点排成一个线性序列 对于有向图中没有限定次序关系的顶点 则可以人为加上任意的次序关系 27 如何进行拓扑排序 一 从有向图中选取一个没有前驱的顶点 并输出之 二 从有向图中删去此顶点以及所有以它为尾的弧 重复上述两步 直至图空 或者图不空但找不到无前驱的顶点为止 没有前驱 入度为零删除顶点及以它为尾的弧 弧头顶点的入度减1 28 算法 取入度为零的顶点v while v0 printf v m w FirstAdj v while w0 inDegree w w nextAdj v w 取下一个入度为零的顶点v ifm nprintf 图中有回路 29 7 8关键路径 问题 假设以有向网表示一个施工流图 弧上的权值表示完成该项子工程所需时间 问 哪些子工程项是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备故障预测与自愈-洞察及研究
- 代谢表观遗传学肿瘤研究-洞察及研究
- 工厂安全培训总结文案课件
- 手指砸伤工伤安全培训课件
- 手指点画刺猬课件
- 间充质干细胞肺修复-洞察及研究
- 化肥厂质量改进办法
- 学生食堂食物安全培训课件
- 天津市河北区2025届高三上学期期末质量检测数学试卷(含答案)
- 手抄报社团课件
- 施工现场安全监理危险源清单一览表
- GB/T 233-2000金属材料顶锻试验方法
- FZ/T 74003-2014击剑服
- 颈椎DR摄影技术-
- 功能材料概论-课件
- 一点儿有点儿课件
- 眼视光技术专业技能考核题库-眼镜定配技术模块
- 体育测量与评价-第二章-体育测量与评价的基础理论课件
- 超清地质年代表
- 铺轨工程监理规划及工作内容
- 女生青春期生理卫生知识讲座(课堂PPT)
评论
0/150
提交评论