数据结构讲义第7章新

合集下载

第7章--新型计算机结构

第7章--新型计算机结构
针对函数程序设计语言的特点和问题来设计支持函数 式程序运行的新计算机,这就是归约机。
2024年7月17日星期三
27
7.3.2面向函数式语言的归约机
• 归约机按其归约模型可分为串归约(String Reduction)机和图归约(Graph Reduction)机 两类。两者的区分主要是对函数表达式所 使用的存储方式不同,前者以字符串形式 存储而后者则以图的形式存储。
C
A
B
c
21c
22
c23
a31a32a33
b31b32b33
c31c32c33
3
其中 Cij aik bkj 1≤i≤3,1≤j≤3
k 1
在4时5图输Ο 中出方c给向23出上, c了将22在同, ct时312、输的t2出值、,ct31t时38 ,时c刻1输2送,出c入11c数,3c3据21的,,c值3到1。的t6 时值,,从t7
2024年7月17日星期三
32
AI处理的基本要点:有关知识的获取、表示和智慧地 加以使用(知识处理)。
知识的获取:AI系统应能从视觉、声音和书写等各种 信息源获取信息。由于这些信息的来源往往是不完整、 不精确甚至是相互矛盾的,因此必须对它们进行止确 的识别和理解。
知识的表示:主要是对有关对象、关系、目标、动作 以及处理过程的信息加以编码,形成数据结构和编写 成过程。
•x
激发后
<0
<0
• T(x<0)
x

y • 激发后


• F(x<y)
利用上述常用结点,可以画出一些程序结构的数据流 程图。
2024年7月17日星期三
17
数据流 程序图 举例

数据结构 第七章 章节重点概要三

数据结构 第七章 章节重点概要三
活动a3 e (3)=ve(2)=3 l (3)=vl (4)-2=13
活动a4 e (4)=ve(2)=3 l (4)=vl (5)-1=6
活动a5 e (5)=ve(3)=4 l (5)=vl (5)-3=4
活动a6 e (6)=ve(3)=4 l (6)=vl (6)-5=14
活动a7 e (7)=ve(4)=5 l (7)=vl (7)-6=15
ptr=G->adjlist[j].firstedge;
while (ptr!=null)
{ k=ptr->adjvex;
G->adjlist[k].count--;/*当前输出顶点邻接点的入度减1*/
if(G->adjlist[k].count= =0)/*新的入度为0的顶点进栈*/
{G->adjlist[k].count =top;
(3)从汇点vn出发,令vl[n-1]=ve[n-1],按逆拓扑有序求其余各顶点的最迟发生时间vl[i](n-2≥i≥2);
(4)根据各顶点的ve和vl值,求每条弧s的最早开始时间e(s)和最迟开始时间1(s)。若某条弧满足条件e(s)=l(s),则为关键活动。
算法7.8求出了各事件的最早发生时间,Stack为栈;引用的函数FindInDegree(G, indegree)用来求图G中各顶点的入度,并将所求的入度存放于一维数组indegree中。
如果用AOE网来表示一项工程,那么,仅仅考虑各个子工程之间的优先关系还不够,更多关心的是:整个工程完成的最短时间是多少?哪些活动的延期将会影响整个工程的进度?而加速这些活动是否会提高整个工程的效率?
因此,通常在AOE网中列出完成预定工程计划所需要进行的活动,每个活动计划完成的时间,要发生哪些事件以及这些事件与活动之间的关系,从而可以确定该项工程是否可行,估算工程完成的时间以及确定哪些活动是影响工程进度的关键。

数据结构《第七章、图》PPT课件

数据结构《第七章、图》PPT课件
由于“弧”是有方向的,因此称由顶点集 和弧集构成的图为有向图。
例如: G1 = (V1, VR1)
其中 A
V1={A, B, C, D, E}
B
E VR1={<A,B>, <A,E>,
C
D
<B,C>, <C,D>, <D,B>, <D,A>, <E,C> }
若<v, w>VR 必有<w, v>VR, 则称 (v,w) 为顶点 v 和顶点 w 之间存在一条边。
A
B
EB
E
CF
CF
假设一个连通图有 n 个顶点和 e 条边, 其中 n-1 条边和 n 个顶点构成一个极小连 通子图,称该极小连通子图为此连通图的 生成树。
B A
F
C D
E
对非连通图,则 称由各个连通分 量的生成树的集 合为此非连通图 的生成森林。
基本操作
结构的建立和销毁 对顶点的访问操作
插入或删除顶点 插入和删除弧
7.2 图的存储表示
一、图的数组(邻接矩阵)存储表示 二、图的邻接表存储表示 三、有向图的十字链表存储表示 四、无向图的邻接多重表存储表示
一、图的数组(邻接矩阵)存储表示
定义:矩阵的元素为
{ 0 (i,j)VR
Aij= 1 (i,j)VR
B A
F
C D
E
010010 100010 000101 001001 110000 011100
含有 e=n(n-1) 条弧的有向图称作 有 向完全图;
若边或弧的个数 e<nlogn,则称作 稀疏图,否则称作稠密图。
假若顶点v 和顶点w 之间存在一条边, 则称顶点v 和w 互为邻接点, 边(v,w) 和顶点v 和w 相关联。

数据结构第7章-答案

数据结构第7章-答案

一、单选题C01、在一个图中,所有顶点的度数之和等于图的边数的倍。

A)1/2 B)1 C)2 D)4B02、在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。

A)1/2 B)1 C)2 D)4B03、有8个结点的无向图最多有条边。

A)14 B)28 C)56 D)112C04、有8个结点的无向连通图最少有条边。

A)5 B)6 C)7 D)8C05、有8个结点的有向完全图有条边。

A)14 B)28 C)56 D)112B06、用邻接表表示图进行广度优先遍历时,通常是采用来实现算法的。

A)栈 B)队列 C)树 D)图A07、用邻接表表示图进行深度优先遍历时,通常是采用来实现算法的。

A)栈 B)队列 C)树 D)图A08、一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为。

A)O(n) B)O(e) C)O(n+e) D)O(n2)C09、已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是。

A)0 2 4 3 1 5 6 B)0 1 3 6 5 4 2 C)0 1 3 4 2 5 6 D)0 3 6 1 5 4 2B10、已知图的邻接矩阵同上题,根据算法,则从顶点0出发,按广度优先遍历的结点序列是。

A)0 2 4 3 6 5 1 B)0 1 2 3 4 6 5 C)0 4 2 3 1 5 6 D)0 1 3 4 2 5 6D11、已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是。

A)0 1 3 2 B)0 2 3 1 C)0 3 2 1 D)0 1 2 3A12、已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是。

A)0 3 2 1 B)0 1 2 3 C)0 1 3 2 D)0 3 1 2A13、图的深度优先遍历类似于二叉树的。

A)先序遍历 B)中序遍历 C)后序遍历 D)层次遍历D14、图的广度优先遍历类似于二叉树的。

课件c语言:数据结构第七章图

课件c语言:数据结构第七章图

含有 e=n(n-1) 条弧的有向图称作 有 向完全图;
若边或弧的个数 e<nlogn,则称作
稀疏图,
13
1
1
4
2
3
4
2
3
无向完全图 有向完全图
15 A 9
11
B 7 21
E
3
C2 F
权:与图的边或 弧相关的数。
网:带权的图。
有两个图G=(V,{E}) 和
图 G=(V,{E}),
245
无向完全图 5
3
6
1
3
6
图与子图 例

245
1 57
1
3
6
32
46
G2
顶点5的度:3 顶点2的度:4
G1
顶点2入度:1 出度:3 顶点4入度:1 出度:0

路径:1,2,3,5,6,3 路径长度:5
245
简单路径:1,2,3,5
回路:1,2,3,5,6,3,1
1
3
6
简单回路:3,5,6,3
G1
31.12.2020
h
6
7.1 图的定义和术语

7.2 图的存储结构(***)

7.3 图的遍历(***)
内 容
7.4 图的连通性问题 最小生成树(***)
7.5 有向无环图及其应用
拓扑排序 关键路径
7.6 最短路径
图的结构定义:
图是由一个顶点集 V 和一个弧集 R构成的 数据结构。
Graph = (V , R ) 其中,VR={<v,w>| v,w∈V 且 P(v,w)}
C D
E
A F

数据结构(C语言版)_第7章 图及其应用

数据结构(C语言版)_第7章 图及其应用
(1)创建有向图邻接表 (2)创建无向图的邻接表
实现代码详见教材P208
7.4 图的遍历
图的遍历是对具有图状结构的数据线性化的过程。从图中任 一顶点出发,访问输出图中各个顶点,并且使每个顶点仅被访 问一次,这样得到顶点的一个线性序列,这一过程叫做图的遍 历。
图的遍历是个很重要的算法,图的连通性和拓扑排序等算法 都是以图的遍历算法为基础的。
V1
V1
V2
V3
V2
V3
V4
V4
V5
图9.1(a)

图7-2 图的逻辑结构示意图
7.2.2 图的相关术语
1.有向图与无向图 2.完全图 (1)有向完全图 (2)无向完全图 3.顶点的度 4.路径、路径长度、回路、简单路径 5.子图 6.连通、连通图、连通分量 7.边的权和网 8.生成树
2. while(U≠V) { (u,v)=min(wuv;u∈U,v∈V-U); U=U+{v}; T=T+{(u,v)}; }
3.结束
7.5.1 普里姆(prim)算法
【例7-10】采用Prim方法从顶点v1出发构造图7-11中网所对 应的最小生成树。
构造过程如图7-12所示。
16
V1
V1
V2
7.4.2 广度优先遍历
【例7-9】对于图7-10所示的有向图G4,写出从顶点A出发 进行广度优先遍历的过程。
访问过程如下:首先访问起始顶点A,再访问与A相邻的未被 访问过的顶点E、F,再依次访问与E、F相邻未被访问过的顶 点D、C,最后访问与D相邻的未被访问过的顶点B。由此得到 的搜索序列AEFDCB。此时所有顶点均已访问过, 遍历过程结束。
【例7-1】有向图G1的逻辑结构为:G1=(V1,E1) V1={v1,v2,v3,v4},E1={<v1,v2>,<v2,v3>,<v2,v4>,<v3,v4>,<v4,v1>,<v4,v3>}

数据结构-第7章图答案

数据结构-第7章图答案

7.3 图的遍历 从图中某个顶点出发游历图,访遍图中其余顶点, 并且使图中的每个顶点仅被访问一次的过程。 一、深度优先搜索 从图中某个顶点V0 出发,访问此顶点,然后依次 从V0的各个未被访问的邻接点出发深度优先搜索遍 历图,直至图中所有和V0有路径相通的顶点都被访 问到,若此时图中尚有顶点未被访问,则另选图中 一个未曾被访问的顶点作起始点,重复上述过程, 直至图中所有顶点都被访问到为止。
void BFSTraverse(Graph G, Status (*Visit)(int v)) { // 按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组 visited。 for (v=0; v<G.vexnum; ++v) visited[v] = FALSE; InitQueue(Q); // 置空的辅助队列Q for ( v=0; v<G.vexnum; ++v ) if ( !visited[v]) { // v尚未访问 EnQueue(Q, v); // v入队列 while (!QueueEmpty(Q)) { DeQueue(Q, u); // 队头元素出队并置为u visited[u] = TRUE; Visit(u); // 访问u for ( w=FirstAdjVex(G, u); w!=0; w=NextAdjVex(G, u, w) ) if ( ! visited[w]) EnQueue(Q, w); // u的尚未访问的邻接顶点w入队列Q
4。邻接多重表
边结点
mark ivex
顶点结点
ilink
jvex
jlink
info
data
firstedge
#define MAX_VERTEX_NUM 20 typedef emnu {unvisited, visited} VisitIf; typedef struct Ebox { VisitIf mark; // 访问标记 int ivex, jvex; // 该边依附的两个顶点的位置 struct EBox *ilink, *jlink; // 分别指向依附这两个顶点的下一条 边 InfoType *info; // 该边信息指针 } EBox; typedef struct VexBox { VertexType data; EBox *firstedge; // 指向第一条依附该顶点的边 } VexBox; typedef struct { VexBox adjmulist[MAX_VERTEX_NUM]; int vexnum, edgenum; // 无向图的当前顶点数和边数 } AMLGraph;

数据结构第七章 排序

数据结构第七章 排序

name 张涛 赵亮
冯博远 王强 李燕
7.2
基本原理
插入排序
每次将一个待排序的对象,按其关键字大小, 插入到前面已经排序好的一组对象的适当位臵上, 直到对象全部插入为止。
直接插入排序(Insert Sort)
希尔排序(Shell Sort)
7.2.1
直接插入排序
R[1]---R[i-1]
08 08
16 16
第三次
08
16
21
25* 25
49
希尔排序中d(间隔量)的取法 Shell最初的方案是 d= n/2, d=d/2, 直到d=1; Knuth的方案是d= d/3+1;
其它方案有:都取奇数为好;d互质为好 等等。
希尔排序的稳定性
如序列: 21 25 排序后为:08 16
R[0]有两个作用:
其一: 进入查找循环之前,保存 R[i] 的副本,使之不至 于因记录的后移而丢失R[i]中的内容; 其二: 在 while 循环时,“监视”下标变量 j 是否越界, 一旦越界(j<0),R[0]自动控制while循环的结束, 从而 避免了在while 循环内的每一次都要检测 j 是否越界( 即 省略了循环条件j>=0)。 因此,把 R[0] 称为“监视哨”。
第七章 排 序
本章内容
排序的概念和有关知识
常用的几种排序方法的基本思想、排序过 程和算法实现 各种排序算法的时间复杂度分析
学生成绩表
学号 姓名 高数 英语 总分
005 010 002
018 004
Chen Lin Gao Hong Wang Na
ZhangYang Zhao Pen
84 69 90

数据结构:第7章 图3-最小生成树

数据结构:第7章 图3-最小生成树

• 按照生成树的定义,n 个顶点的连通网络的生成树有 n
个顶点、n-1 条边。
即有权图
目标:
在网络的多个生成树中,寻找一个各边权值之和最小的
生成树。
构造最小生成树的准则 ❖ 必须只使用该网络中的边来构造最小生成树;
❖ 必须使用且仅使用n-1条边来联结网络中的n个顶点;
❖ 不能使用产生回路的边。
典型用途:
(b) u={1} w={2,3,4,5,6}
0 6 1 5
6
0
5
3
1 5 0 7 5 4
5
7
0
2
3 5 0 6
4 2 6 0
i
1234
closest[i] 1 1 1 1
lowcost[i] 0 6 1 5
56 11 ∞∞
closest用于存放顶点序号 lowest存放权值
15 4 6
1 25
3
54
5
6
(c ) u={1,3} w={2,4,5,6}
1
1
4
25
6
32
54
5
6
(d) u={1,3,6} w={2,4,5}
i
1234 5 6
closest[i] 1 3 1 1 3 3
lowcost[i] 0 5 0 5 5 4
i
1234 5 6
closest[i] 1 3 1 6 3 3

v3 v1

树 v4 v2
v1
0^ 1^ 0^ 1^
2.生成森林
若一个图是非连通图或非强连通图,但有若 干个连通分量或若干个强连通分量,则通过 深度优先搜索遍历或广度优先搜索遍历,不 可以得到生成树,但可以得到生成森林,且 若非连通图有 n 个顶点,m 个连通分量或强 连通分量,则可以遍历得到m棵生成树,合 起来为生成森林,森林中包含n-m条树边。

数据结构第7章-答案

数据结构第7章-答案

一、单选题C01、在一个图中,所有顶点的度数之和等于图的边数的倍。

A)1/2 B)1 C)2 D)4B02、在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。

A)1/2 B)1 C)2 D)4B03、有8个结点的无向图最多有条边。

A)14 B)28 C)56 D)112C04、有8个结点的无向连通图最少有条边。

A)5 B)6 C)7 D)8C05、有8个结点的有向完全图有条边。

A)14 B)28 C)56 D)112B06、用邻接表表示图进行广度优先遍历时,通常是采用来实现算法的。

A)栈 B)队列 C)树 D)图A07、用邻接表表示图进行深度优先遍历时,通常是采用来实现算法的。

A)栈 B)队列 C)树 D)图A08、一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为。

A)O(n) B)O(e) C)O(n+e) D)O(n2)C09、已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是。

A)0 2 4 3 1 5 6 B)0 1 3 6 5 4 2 C)0 1 3 4 2 5 6 D)0 3 6 1 5 4 2B10、已知图的邻接矩阵同上题,根据算法,则从顶点0出发,按广度优先遍历的结点序列是。

A)0 2 4 3 6 5 1 B)0 1 2 3 4 6 5 C)0 4 2 3 1 5 6 D)0 1 3 4 2 5 6D11、已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是。

A)0 1 3 2 B)0 2 3 1 C)0 3 2 1 D)0 1 2 3A12、已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是。

A)0 3 2 1 B)0 1 2 3 C)0 1 3 2 D)0 3 1 2A13、图的深度优先遍历类似于二叉树的。

A)先序遍历 B)中序遍历 C)后序遍历 D)层次遍历D14、图的广度优先遍历类似于二叉树的。

数据结构第7章-答案

数据结构第7章-答案

一、单选题C01、在一个图中,所有顶点的度数之和等于图的边数的倍。

A)1/2 B)1 C)2 D)4B02、在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。

A)1/2 B)1 C)2 D)4B03、有8个结点的无向图最多有条边。

A)14 B)28 C)56 D)112C04、有8个结点的无向连通图最少有条边。

A)5 B)6 C)7 D)8C05、有8个结点的有向完全图有条边。

A)14 B)28 C)56 D)112B06、用邻接表表示图进行广度优先遍历时,通常是采用来实现算法的。

A)栈B)队列C)树D)图A07、用邻接表表示图进行深度优先遍历时,通常是采用来实现算法的。

A)栈B)队列C)树D)图A08、一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为。

A)O(n) B)O(e) C)O(n+e) D)O(n2)C09、已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是。

A)0 2 4 3 1 5 6 B)0 1 3 6 5 4 2 C)0 1 3 4 2 5 6 D)0 3 6 1 5 4 2B10、已知图的邻接矩阵同上题,根据算法,则从顶点0出发,按广度优先遍历的结点序列是。

A)0 2 4 3 6 5 1 B)0 1 2 3 4 6 5 C)0 4 2 3 1 5 6 D)0 1 3 4 2 5 6D11、已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是。

A)0 1 3 2 B)0 2 3 1 C)0 3 2 1 D)0 1 2 3A12、已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是。

A)0 3 2 1 B)0 1 2 3 C)0 1 3 2 D)0 3 1 2A13、图的深度优先遍历类似于二叉树的。

A)先序遍历B)中序遍历C)后序遍历D)层次遍历D14、图的广度优先遍历类似于二叉树的。

数据结构:第7章 图4-拓扑排序和关键路径

数据结构:第7章 图4-拓扑排序和关键路径

拓扑排序算法
拓扑排序方法: (1)在AOV网中选一个入度为0的顶点(没有前驱) 且输出之; (2)从AOV网中删除此顶点及该顶点发出来的所 有有向边; (3)重复(1)、(2)两步,直到AOV网中所有 顶点都被输出或网中不存在入度为0的顶点。
从拓扑排序步骤可知,若在第3步中,网中所有顶 点都被输出,则表明网中无有向环,拓扑排序成功。 若仅输出部分顶点,网中已不存在入度为0的顶点, 则表明网中有有向环,拓扑排序不成功。
拓扑序列:C1--C2--C3 (3)
C12 C9 C10
C7 C8 C6
C11
拓扑序列:C1--C2--C3--C4 (4)
C7
C12
C12
C8
C8 C9 C10
C6
C9 C10
C6
C11
C11 拓扑序列:C1--C2--C3--C4--C5
(5)
拓扑序列:C1--C2--C3--C4--C5--C7 (6)
在 (b)中,我们用一种有向图来表示课程开设
拓扑排序
1.定义 给出有向图G=(V,E),对于V中的顶点的线性序列 (vi1,vi2,...,vin),如果满足如下条件:若在G中从 顶点 vi 到vj有一条路径,则在序列中顶点vi必在 顶点 vj之前;则称该序列为 G的一个拓扑序列。 构造有向图的一个拓扑序列的过程称为拓扑排序。 2.说明 (1)在AOV网中,若不存在回路,则所有活动可排成 一个线性序列,使得每个活动的所有前驱活动都排 在该活动的前面,那么该序列为拓扑序列. (2)拓扑序列不是唯一的.
2.AOV网实际意义
现代化管理中, 通常我们把计划、施工过程、生产流程、 程序流程等都当成一个工程,一个大的工程常常被划分 成许多较小的子工程,这些子工程称为活动。在整个工 程实施过程中,有些活动开始是以它的所有前序活动的 结束为先决条件的,必须在其它有关活动完成之后才能 开始,有些活动没有先决条件,可以 安排在任意时间开 始。AOV网就是一种可以形象地反映出整个工程中各个 活动之间前后关系的有向图。例如,计算机专业学生的 课程开设可看成是一个工程,每一门课程就是工程中的 活动,下页图给出了若干门所开设的课程,其中有些课 程的开设有先后关系,有些则没有先后关系,有先后关 系的课程必须按先后关系开设,如开设数据结构课程之 前必须先学完程序设计基础及离散数学,而开设离散数 学则必须先并行学完数学、程序设计基础课程。

数据结构 (C语言版)课件:第7章_图

数据结构 (C语言版)课件:第7章_图
非简单图
2020/9/30
3
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 无向图和有向图
● 无向图:如果图中顶点 vi 和 vj 之间的边无方向,则称这条边为无向边, 用无序偶对 (vi, vj) 表示,称该图为无向图。
● 有向图:如果图中顶点 vi 和 vj 之间的边有方向,则称这条边为有向边, 用有序偶对 <vi, vj> 表示,称该图为有向图。
无论有向图还是无向图,顶点数 n、边 数 e 和度数之间满足:
2020/9/30
8
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 权和网
● 权:权通常是指对图中边赋予的有意义的数值量。在实际应用中,权 可以有具体的含义。
● 网:如果将图中的每条边上都赋上一个权值,则称这种图为网,或称 为有权图 。
2020/9/30
6
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 稀疏图和稠密图
● 稀疏图:边数很少的图称为稀疏图,如果 e 表示图中的边数,n 表示 图中的顶点数,则 e<nlogn。
● 稠密图:边数很多的图称为稠密图,如果 e 表示图中的边数,n 表示 图中的顶点数,则 e≥nlogn。
2020/9/30
无向完全图
有向完全图
5
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 邻接和依附
● 邻接:对图 G=(V, VR),如果边 (vi, vj)∈VR,则称顶点 vi 和 vj 互为邻 接点;如果弧<vi, vj>∈VR,则称顶点 vi 邻接到 vj,vj 邻接自 vi。
● 依附:对图 G=(V, VR),如果边 (vi, vj)∈VR 或弧 <vi, vj>∈VR,则称 边 (vi, vj) 或弧 <vi, vj> 依附于顶点 vi 和 vj。

数据结构第7章图3有向无环图及其应用ppt课件

数据结构第7章图3有向无环图及其应用ppt课件
while (!StackEmpty(S)) { Pop(S,i); printf(i,G.vertices[i].data); ++count; //输出i号顶点并计数
for(p=G.vertices[i].firstarc; p; p=p->nextarc){ k=p—>adivex;//对i号顶点的每个邻接点入度减1 if(!(--indegree[k])) Push(S,k); //若入度减为0,则入栈
§7.5 有向无环图及其应用
❖有向无环图
在工程实践中,一个工程项目往往由若干个子项 目组成,这些子项目间往往有多种关系:
①先后关系,即必须在一子项目完成后,才能开 始实施另一个子项目;
②子项目之间无次序要求,即两个子项目可以同 时进行,互不影响。
§7.5 有向无环图及其应用
❖两种常用的活动网络(Activity Network)
3
4 4^
4
2 1^ 3^
1^
s
0 V1 3 V4
5 V6
4
V2 1 V3 2 V5 4
indegree[0..5] 0 0 0 0 0 0 012345
最后输出的拓扑序列为:v6v1v3v2v4v5
§7.5 有向无环图及其应用
G.vertices[0] v1
3
2
G.vertices[1] v打2 印^G.vertices[4].data
1. 输入AOV网络。令 n 为顶点个数。 2. 在AOV网络中选一个没有直接前驱的顶点, 并输出之; 3. 从图中删去该顶点, 同时删去所有它发出的有向边; 4. 重复以上 2、3 步, 直到:
全部顶点均已输出,拓扑有序序列形成,拓扑排序完成 或者,图中还有未输出的顶点,但已跳出处理循环。这说 明图中还剩下一些顶点,它们都有直接前驱,再也找不到 没有前驱的顶点了。这时AOV网络中必定存在有向环。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

反之,对于下列有向图
B A C D
不能求得它的拓扑有序序列。 因为图中存在一个回路 {B, C, D}
如何进行拓扑排序? 如何进行拓扑排序?
一、从有向图中选取一个没有前驱 没有前驱 的顶点(入度为0),并输出之; 二、从有向图中删去此顶点以及所 删去此顶点以及所 有以它为尾的弧; 有以它为尾的弧 重复上述两步,直至图空,或者 图不空但找不到无前驱的顶点为止。
设图G=(V,{VR})中的一个顶点序列 { u=vi,0,vi,1, …, vi,m=w}中,(vi,j-1,vi,j)∈VR 1≤j≤m, 则称从顶点u 到顶点w 之间存在一条路径 路径。 路径 路径上边的数目称作路径长度 路径长度。 路径长度 如:长度为3的路径 简单路径:序列中顶点 简单路径 {A,B,C,F} 不重复出现的路径。 A 简单回路:序列中第一 简单回路 B E 个顶点和最后一个顶 点相同的路径。 C F
∞,反之
V1 15 8 12 2 7 3 1 V 2 4
3
V6
V3
∞ 15 ∞ 3 ∞ ∞ ∞ ∞ 4 ∞ ∞ ∞ 8 ∞ ∞ ∞ ∞ 12 ∞ ∞ ∞ ∞ 2 1 ∞ ∞ ∞ 9 ∞ ∞ 3 ∞ ∞ ∞ 7 ∞
V5
9
V4
二、图的邻接表 存储表示
算法一:(普里姆算法) 算法一:(普里姆算法) :(普里姆算法 算法二:(克鲁斯卡尔算法) 算法二:(克鲁斯卡尔算法) :(克鲁斯卡尔算法
普里姆算法的基本思想: 普里姆算法的基本思想
取图中任意一个顶点 v 作为生成树的根, 在添加 之后往生成树上添加新的顶点 w。在添加 和已经在生成树上的顶点v 的顶点 w 和已经在生成树上的顶点 之间 必定存在一条边, 必定存在一条边,并且该边的权值在所有 之间的边中取值最小。之 连通顶点 v 和 w 之间的边中取值最小 后继续往生成树上添加顶点,直至生成树 上含有 n-1 个顶点为止。
例如: 例如 a c h
0 1 2 3
b e k
4 5
g f
d
6
7
8
访问标志: T T T T T T T T T 访问标志: F F F F F F F F F 访问次序: 访问次序: a c h d k f e b g
7.3.2
基本思想: 基本思想:
广度优先搜索
从图中某个顶点v 出发,首先访问v (1)从图中某个顶点v0出发,首先访问v0。 (2)依次访问v0的各个未被访问的邻接点。 依次访问v 的各个未被访问的邻接点。
例如: 例如:
a
18 16 19 14 12 7
b
5
c
3
e
8
g
27
பைடு நூலகம்
d f
21
比较两种算法
算法名 时间复杂度 适应范围
普里姆算法 克鲁斯卡尔算法
O(n2) 稠密图
O(eloge) 稀疏图
7.5.1 拓扑排序
问题: 问题
假设以有向图表示一个工程的施 工图或程序的数据流图,则图中不允 许出现回路。
检查有向图中是否存在回路的方法 之一,是对有向图进行拓扑排序 拓扑排序。 拓扑排序
<B,E>, <C,D>, <D,F>, <B,F>, <C,F> }
由顶点集和边 集构成的图称 作无向图。
B A F
C D E
名词和术语
网、子图 完全图、稀疏图、稠密图 邻接点、度、入度、出度 路径、路径长度、简单路径、简单回路 连通图、连通分量、 强连通图、强连通分量 生成树、生成森林
15
A
7.1 图的定义和术语 7.2 图的存储表示 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图及其应用 7.6 最短路径
图的结构定义: 图的结构定义
图是由一个顶点集 V 和一个弧集 R构成 是由一个顶点集 和一个弧集 构成 的数据结构。 的数据结构。 Graph = (V , R ) 其中,VR={<v,w>| v,w∈V 且 P(v,w)} <v,w>表示从 v 到 w 的一条弧,并称 v 为 弧头,w 为弧尾 弧尾。 弧头 弧尾 谓词 P(v,w) 定义了弧 <v,w>的意义或信息。
克鲁斯卡尔算法的基本思想: 克鲁斯卡尔算法的基本思想:
考虑问题的出发点: 考虑问题的出发点 为使生成树上边的权 值之和达到最小,则应使生成树中每一条 边的权值尽可能地小。 具体做法: 具体做法 先构造一个只含 n 个顶点的子图 SG,然后从权值最小的边开始,若它的添 加不使SG 中产生回路,则在 SG 上加上这 条边,如此重复,直至加上 n-1 条边为止。
何谓“拓扑排序” 何谓“拓扑排序”?
对有向图进行如下操作:
按照有向图给出的次序关系, 将图中顶点排成一个线性序列, 对于有向图中没有限定次序关 系的顶点,则可以人为加上任 意的次序关系。
由此所得顶点的线性序列称之为 拓扑有序序列
例如:对于下列有向图
B A C D
可求得拓扑有序序列: ABCD 或 ACBD
假若顶点v 和顶点w 之间存在一条边, 则称顶点v 和w 互为邻接点 邻接点, 邻接点 边(v,w) 和顶点v 和w 相关联 关联。 关联 和顶点v 关联的边的数目 边的数目定义为顶点v的度。 边的数目 度 例如: 例如: TD(B) = 3 TD(A) = 2 F E A B C D
对有向图来说, 对有向图来说
0 (i,j)∉VR
A B C DD E F
有向图的邻接矩阵 为非对称矩阵
A B C E E F
A B C E F
A B C F
0 0 0 0 1
1 0 0 0 1
0 1 0 1 0
1 0 0 0 0
0 0 1 0 0
网的邻接矩阵可定义为: 网的邻接矩阵可定义为:
wij,若(vi,vj)或< vi,vj >∈E ∈ A[i,j]=
若图G中任意两个顶 点之间都有路径相通, 则称此图为连通图 连通图; A 连通图 B A F E C D
B
C D
F
E
若无向图为非连通图, 则图中各个极大连通 子图称作此图的连通 连通 分量。 分量
若任意两个顶点之间都存在 对有向图, 对有向图, 一条有向路径,则称此有向图为强连通图 强连通图。 强连通图 否则,其各个强连通子图称作它的 强连通分量。 强连通分量 A B C F E B C F A E
例如: 例如:
a
18 16 19 14 12 7
b
5
c
3
e
8
g
27
d f
21
所得生成树权值和 = 14+8+3+5+16+21 = 67
一般情况下所添加的顶点应满足下列 条件: 在生成树的构造过程中,图中 n 个 顶点分属两个集合:已落在生成树上的 顶点集 U 和尚未落在生成树上的顶点集 V-U ,则应在所有连通 中顶点和 在所有连通U中顶点和 在所有连通 中顶点和V-U中 中 顶点的边中选取权值最小的边。 顶点的边中选取权值最小的边
7.3.2

广度优先搜索
求图G 的以V0 V0起点的的广度优先序列 求图G 的以V0起点的的广度优先序列 V0,V1,V2,V3,V4,V5,V6,V7 由于没有规定 访问邻接点的顺序, 访问邻接点的顺序, 广度优先序列不是唯一的
V0 V0 V1 V1 V2 V2 V4 V4 V7 V7 V5 V5
V3 V3
V6 V6
7.4 图的连通性问题
问题: 问题:
假设要在 n 个城市之间建立通讯 联络网,则连通 n 个城市只需要修建 n-1条线路,如何在最节省经费的前 如何在最节省经费的前 提下建立这个通讯网 通讯网? 提下建立 通讯网
该问题等价于: 该问题等价于: 构造网的一棵最小生成树,即: 在 e 条带权的边中选取 n-1 条边(不构成 回路),使“权值之和 权值之和”为最小。 权值之和
深度优先搜索 广度优先搜索 遍历应用举例
一、深度优先搜索遍历图
连通图的深度优先搜索遍历
从图中某个顶点V0 出发,访问此顶 点,然后依次从 0的各个未被访问的邻 依次从V 依次从 接点出发深度优先搜索遍历图,直至图中 接点出发深度优先搜索遍历图 所有和V0有路径相通的顶点都被访问到。
7.3.1

连通图深度优先搜索 求图G以 起点的的深度优先序列 求图 以V1起点的的深度优先序列
21 2
9 11
弧或边带权的图
B
3
7
E
C
F
有向网或 分别称作有向网 有向网 无向网。 无向网
设图G=(V,{VR}) 和 图 G′=(V′,{VR′}), 且 V′⊆V, VR′⊆VR, 子图。 则称 G′ 为 G 的子图 子图
B A B C F E
假设图中有 n 个顶点,e 条边,则 含有 e=n(n-1)/2 条边的无向图称作 完全图; 完全图 含有 e=n(n-1) 条弧的有向图称作 有向完全图; 有向完全图 若边或弧的个数 e<nlogn,则称作 稀疏图,否则称作稠密图 稀疏图 稠密图。 稠密图
(3)分别从这些邻接点(端结点)出发,依次访问 分别从这些邻接点(端结点)出发, 它们的各个未被访问的邻接点(新的端结点)。 它们的各个未被访问的邻接点(新的端结点)。 访问时应保证:如果Vi和Vk为当前端结点,且Vi在 访问时应保证:如果Vi和Vk为当前端结点, Vi在 Vi 为当前端结点 Vk之前被访问, Vi的所有未被访问的邻接点应在 Vk之前被访问,则Vi的所有未被访问的邻接点应在 之前被访问 Vk的所有未被访问的邻接点之前访问。重复( Vk的所有未被访问的邻接点之前访问。重复(3), 的所有未被访问的邻接点之前访问 直到所有端结点均没有未被访问的邻接点为止。 直到所有端结点均没有未被访问的邻接点为止。 若此时还有顶点未被访问, 若此时还有顶点未被访问,则选一个未被访问的顶 点作为起始点,重复上述过程, 点作为起始点,重复上述过程,直至所有顶点均被 访问过为止。 访问过为止。
相关文档
最新文档