数据结构第七节.ppt

数据结构课程的内容 第7章 图 7.1 图的基本术语 例:判断下列4种图形各属什么类型? 证明: 稀疏图: 稠密图: 带权图: 邻接点: 简单路径: 图的抽象数据类型 7.2 图的存储结构 图的特点: 1. 邻接矩阵(数组)表示法 例2 :有向图的邻接矩阵如何表示? 例3 : 有权图(即网络)的邻接矩阵如何表示? 图的邻接矩阵在机内如何表示? (参见教材P161) 例:用邻接矩阵生成无向网的算法(参见教材P162) 2. 邻接表(链式)表示法 例1:无向图的邻接表如何表示? 例3:已知某网的邻接(出边)表,请画出该网络。 邻接表存储法的特点: 讨论:邻接表与邻接矩阵有什么异同之处? 图的邻接表在机内如何表示? (参见教材P163) 3. 十字链表表示法 例:画出有向图的十字链表。 十字链表存储结构描述: 4. 邻接多重表表示法 例:画出无向图的邻接多重表 7.3 图的遍历 一、深度优先搜索( DFS ) 深度优先搜索(遍历)步骤: 讨论1:计算机如何实现DFS? 讨论2: DFS算法如何编程? 讨论3:在图的邻接表中如何进行DFS? 讨论4: 邻接表的DFS算法如何编程? DFS 算法效率分析: 二、广度优先搜索( BFS ) 广度优先搜索(遍历)步骤: 讨论1:计算机如何实现BFS? 讨论2: BFS算法如何编程? BFS 算法效率分析: 7.4 图的连通性问题 1.求图的生成树(或生成森林) 例1 :画出下图的生成树 例2:画出下图的生成森林(或极小连通子图) 2. 求最小生成树 典型用途: 讨论:如何求得最小生成树? Kruskal算法示例:对边操作,归并边 普利姆(Prim)算法示例: 归并顶点 7.5 有向无环图及其应用 1. 拓扑排序 2. 求关键路径 1 拓扑排序 在工程实践中,一个工程项目往往由若干个子项目组成,这些子项目间往往有多种关系: ①先后关系,即必须在一子项目完成后,才能开始实施另一个子项目; ②子项目之间无次序要求,即两个子项目可以同时进行,互不影响。 在工厂中,一件设备的生产包括许多工序,各工序之间也存在这两种关系。 学校里某个专业的课程学习,有些课程是基础课,它们可以独立于其它课程,即无前导课程;有些课程必须在一些课程学完后才能开始学。 这些类似的问题都可以用有向图来表示,我们把这些子项目、工序、课程看成一个个顶点称之为活动(Activity)。 如果从顶点Vi到Vj之间存在有向边 Vi,Vj,则表示活动i必须先于活动j进行。这种图称做顶点表示活动的网络(Activity On Vertex network,简称AOV网络)。 例如表5-6-1是某校计算机专业的课程及其相互之间的关系,它对应的AOV网络如图5-6-1所示。 图5-6-1(a) AOV网络 在AOV网络中,如果顶点Vi的活动必须在顶点Vj的活动以前进行,则称Vi为Vj的前趋顶点,而称Vj为Vi的后继顶点。这种前趋后继关系有传递性。 AOV网络中一定不能有有向环路。例如在图5-6-1(b)那样的有向环路中,V2是V3的前趋顶点,V1是V2的前趋顶点,V3又是V1的前趋顶点,环路表示顶点之间的先后关系进入了死循环。 因此,对给定的AOV网络首先要判定网络中是否存在环路,只有有向无环路网络在应用中才有实际意义。 图5-6-1(b) 有向环路 所谓“拓扑排序”就是将AOV网络中的各个顶点(各个活动)排列成一个线性有序序列,使得所有要求的前趋、后继关系都能得到满足。 由于AOV网络中有些顶点之间没有次序要求,它们在拓扑有序序列中的位置可以任意颠倒,所以拓扑排序的结果一般并不是唯一的。 通过拓扑排序还可以判断出此AOV网络是否包含有有向环路,若有向图G所有顶点都在拓扑排序序列中,则AOV网络必定不包含有有向环路。 拓扑排序方法 (1) 在AOV网中选择一个没有前驱(即入度为0)的顶点,并把它输出; (2) 从网络中删去该顶点和从该顶点发出的所有有向边; (3) 重复执行上述两步,直到网中所有的顶点都被输出 (此时,原AOV网络中的所有顶点和边就都被删除掉了)。 如果进行到某一步,无法找到无前趋的顶点,则说明此AOV网络中存在有向环路,遇到这种情况,拓扑排序就无法进行了。 图5-6-2 AOV网及拓扑序列的产生过程 为了实现拓扑排序,针对上述两个步骤,采用邻接表作为有向图的存储结构,并且在表结点中增设一个入度,存放顶点的入度。例如图5-6-2种的AOV网的邻接表如图5-6-3(a)所示。这样,入度域为零的表结点及时无前驱的顶点,删除该顶点及它为尾的弧的操作,则可以转换为将它的所有弧头顶点的入度减1来实现 3.各项作业之间的关系及它们在网络图上的表达方式如下: 作业a结束后可以开

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档