第7章 图 7.1 图的定义和术语 证明: 例:判断下列4种图形各属什么类型? 稀疏图: 稠密图: 带权图: 邻接点: 简单路径: 图的抽象数据类型 7.2 图的存储结构 图的特点:非线性结构(m :n ) 一、邻接矩阵(数组)表示法 例2 :有向图的邻接矩阵 特别讨论 :网(即有权图)的邻接矩阵 图的邻接矩阵存储表示(参见教材P161) 例:用邻接矩阵生成无向网的算法(参见教材P162) 二、邻接表(链式)表示法 例1:无向图的邻接表 例3:已知某网的邻接(出边)表,请画出该网络。 邻接表存储法的特点: 讨论:邻接表与邻接矩阵有什么异同之处? 图的邻接表存储表示 三、十字链表 十字链表存储结构描述: 例:画出有向图的十字链表。 四、邻接多重表 例:画出无向图的邻接多重表 7.3 图的遍历 一、深度优先搜索( DFS ) 讨论:计算机如何实现DFS? DFS 算法效率分析: 二、广度优先搜索( BFS ) 广度优先搜索(遍历)步骤: 讨论:计算机如何实现BFS? BFS 算法效率分析: 7.4 图的连通性问题 回忆:图的生成树(或生成森林) 7.4.1 无向图的连通分量和生成树 例1 :遍历下图得到的生成树 例2:画出下图的生成森林(或极小连通子图) 7.4.3 求最小生成树 典型用途: 讨论:如何求得最小生成树? 普利姆(Prim)算法 例: 计算机内怎样实现Prim(普里姆)算法? 具体示例: 算法流程 普里姆(Prim)算法算法思想:设N=(V,{E})是连通网,TE是N上最小生成树中边的集合 初始令U={u0},(u0?V), TE=? 在所有u?U,v?V-U的边(u,v)?E中,找一条代价最小的边(u0,v0) 将(u0,v0)并入集合TE,同时v0并入U 重复上述操作直至U=V为止,则T=(V,{TE})为N的最小生成树 算法实现:图用邻接矩阵表示 算法评价:T(n)=O(n2) 克鲁斯卡尔(Kruskal)算法: 例:应用克鲁斯卡尔算法构造最小生成树的过程 Kruskal(克鲁斯卡尔)算法 7.6 最短路径 最短路径 迪杰斯特拉(Dijkstra)算法思想 例2: Dijkstra(迪杰斯特拉)算法 算法描述: 例3: 算法流程: 7.6.2 每一对顶点之间的最短路径 方法一:每次以一个顶点为源点,重复执行Dijkstra算法n次—— T(n)=O(n3) 方法二:弗洛伊德(Floyd)算法 算法思想:逐个顶点试探法 求最短路径步骤 初始时设置一个n阶方阵,令其对角线元素为0,若存在弧Vi,Vj,则对应元素为权值;否则为? 逐步试着在原直接路径中增加中间顶点,若加入中间点后路径变短,则修改之;否则,维持原值 所有顶点试探完毕,算法结束 7.5 有向无环图及其应用 有向无环图的应用 AOV网络的用途: 进行拓扑排序的方法: AOE网络的用途: 什么叫关键路径? 以上分析概要 如何找e(i)=l(i)的关键活动? 最终求出的关键路径 求关键路径步骤 求Ve(i) 求Vl(j) 求e(i) 求l(i) 计算l(i)-e(i) 求ve[] 本章小结 0 1 2 2 in link 5 5 4 3 ^ ^ ^ vex next 2 ^ 2 5 ^ 2 4 0 1 2 3 4 5 6 ^ 输出序列:6 3 2 1 0 4 1 top p 0 1 1 2 in link 5 5 4 3 ^ ^ ^ vex next 2 ^ 2 5 ^ 2 4 0 1 2 3 4 5 6 ^ 输出序列:6 3 2 1 0 4 1 top p 0 1 1 2 in link 5 5 4 3 ^ ^ ^ vex next 2 ^ 2 5 ^ 2 4 0 1 2 3 4 5 6 ^ 输出序列:6 3 2 1 0 4 1 top p=NULL 0 1 1 2 in link 5 5 4 3 ^ ^ ^ vex next 2 ^ 2 5 ^ 2 4 0 1 2 3 4 5 6 ^ 输出序列:6 1 3 2 1 0 4 1 top top 0 1 1 2 in link 5 5 4 3 ^ ^ ^ vex next 2 ^ 2 5 ^ 2 4 0 1 2 3 4 5 6 ^ 输出序列:6 1 3 2 1 0 4 top p 0 1 0 2 in link 5 5 4 3 ^ ^ ^ vex next 2 ^ 2 5 ^ 2 4 0 1 2 3 4 5 6 ^ 输出序列:6 1 3 2 1 0 4 top p 4 0 1 0 2 in link 5 5 4 3 ^ ^ ^ vex next 2 ^ 2 5 ^ 2

文档评论(0)

1亿VIP精品文档

相关文档