第六章图解析.ppt

§6.1 图的基本概念 §6.1 图的基本概念 §6.1 图的基本概念 §6.1 图的基本概念 §6.1 图的基本概念 §6.1 图的基本概念 §6.1 图的基本概念 §6.1 图的基本概念 §6.1 图的基本概念 §6.1 图的基本概念 §6.1 图的基本概念 §6.1 图的基本概念 第六 章 图 § 6.2 图的存储结构 § 6.2 图的存储结构 § 6.2 图的存储结构 § 6.2 图的存储结构 § 6.2 图的存储结构 § 6.2 图的存储结构 § 6.2 图的存储结构 § 6.2 图的存储结构 § 6.2 图的存储结构 § 6.2 图的存储结构 § 6.2 图的存储结构 § 6.2 图的存储结构 §6.3 图的遍历 §6.3 图的遍历 §6.3 图的遍历 §6.3 图的遍历 §6.3 图的遍历 §6.3 图的遍历 §6.3 图的遍历 §6.4 生成树 §6.4 最小的生成树 §6.4 最小的生成树 二、克鲁斯卡尔算法(Kruscal) 算法具体做法:先构造只含有n个顶点的子图SG,然后从权值最小的边开始添加,若它的添加不使SG中产生回路,则在SG上加上这条边,如此重复,直至加上n-1条边为止。 §6.4 最小的生成树 第六 章 图 §6.5 有向无环图的应用 §6.5 有向无环图的应用 §6.5 有向无环图的应用 §6.5 有向无环图的应用 §6.5 有向无环图的应用 §6.5 有向无环图的应用 §6.6 有向无环图的应用 求关键路径的算法 输入e条弧i.j,建立AOE网的存储结构。 从源点V0出发,令ee[0]=0按拓扑有序求其余各顶点的最早发生时间ee[i](1≤i≤n-1)。如果得到的拓扑有序序列中顶点个数小于网中顶点数n,则说明网中存在环,不能求关键路径。算法终止,否则执行步骤3。 从汇点Vn出发,令le[n-1]=ee[n-1],按逆拓扑有序求其余各顶点的最迟发生时间le[i](0≤i≤n-2)。 根据各顶点的ee和le值,求每条弧的最早开始时间e(s)和最迟开始时间l(s)。若某条弧满足条件e(s)=l(s),则为关键活动。 §6.6 最短路径 §6.6 最短路径 §6.6 最短路径 所有定点对之间的最短路径 问题描述: 已知一个各边权值均大于0的带权有向图G,对每对顶点Vi≠Vj,要求求出每一对顶点之间的最短路径和最短路径长度。 解决方案: 1. 每次以一个顶点为源点,重复执行迪杰斯特拉算法n次。这样便可求得每一对顶点之间的最短路径。总的执行时间为O(n3)。 2. 弗洛伊德(Floyd)算法。时间复杂度为O(n3)。 图的遍历:从图的某个顶点出发,访问图中所有顶点,并且每个 顶点仅被访问一次。 在图中,访问部分顶点后,可能又沿着其他边回到已被访问过的顶点。为保证每一个顶点只被访问一次,必须对顶点进行标记,一般用一个辅助数组 visit[MAX]作为对顶点的标记,当顶点vi未被访问,visit[i]=0;当vi已被访问,则visit[i]=1。 图的遍历与 树的遍历有什么不同 有两种遍历方法(它们对无向图,有向图都适用) 深度优先遍历(DFS) 广度优先遍历(BFS) 从图中某顶点v出发: 1)访问顶点v; 2)依次从v的未被访问的邻接点出发,继续对图进行深度优先遍历; V0,V1,V3,V7,V4,V2,V5,V6, 由于没有规定 访问邻接点的顺序, 深度优先序列不是唯一的 这是序列(1) 在遍历过程中 所经过的路径 例 一 深度优先遍历(DFS) 求图G以V0起点的的深度优先序列: V0,V1,V4,V7,V3,V2,V5,V6 V0 V7 V6 V5 V4 V3 V2 V1 V0 V1 V3 V2 V7 V6 V5 V4 如果将图顶点的邻接点 看作二叉树结点的左、右孩子 深度优先遍历与先序遍历 是不是很类似? 深度优先遍历 从图中某顶点v出发: (1)访问顶点v; (2)依次从v的未被访问的邻接点 出发,对图进行深度优先遍历; 先序遍历(DLR) 若二叉树非空 (1)访问根结点; (2)先序遍历左子树; (3)先序遍历右子树; V0 V7 V6 V5 V4 V3 V2 V1 void dfs( int v){ int w; Arcnode p; System.out.print( vNodes[v].data); visit[v]=1; // 访问此结点 p=vNodes[v].firstArc; while (p!

文档评论(0)

1亿VIP精品文档

相关文档