《数据结构》【教案】第六章 图

合集下载

数据结构:第六章图1

数据结构:第六章图1

三、图的抽象数据类型定义:
ADT Graph { 数据对象V:一个集合,该集合中的所有元素
具有相同的特性。 数据关系R:R={VR}
VR={<x,y>∣P(x,y)∧(x,y∈V)} 基本操作: }
基本操作
(1)GreateGraph(G):创建图G。 (2)DestoryGraph(G):销毁图G。
生成树、生成森林
设图G=(V,{VR}) 和 B
图 G=(V,{VR}),
A
且 VV, VRVR,
B
则称 G 为 G 的子图。
C
15 A 9
E F
11
B 7 21
E
3
C2 F
弧或边带权的 图分别称作有向
网或无向网。
假设图中有 n 个顶点,e 条边,则
含e=n(n-1)/2 条边的无向图称作 无向完全图;
A
B
E
CD
01 00 1 00 10 0 00 01 0 11 00 0 00 10 0
每行1的个数就是对应节点的出度 每列1的个数就是对应节点的入度
网的邻接矩阵
Wij 若<vi,vj>或(vi,vj)VR A[i,j]=
∞ 反之 ∞ 15 ∞ ∞ 9
A
15
9
B 7 11
E
3C
21
D
2
∞∞ 3 ∞∞ ∞∞∞ 2 ∞ 11 7 ∞ ∞ ∞ ∞ ∞ 21 ∞ ∞
return(j); }
int CreateDN(AdjMatrix *G) /*创建一个有向网*/ { int i,j,k,weight; VertexData v1,v2;
scanf("%d,%d",&G->arcnum,&G->vexnum); for(i=0;i<G->vexnum;i++) for(j=0;j<G->vexnum;j++)

数据结构六章图

数据结构六章图
第六章 图
§6.1 图的概念
图(Graph)——是一种结点之间为多对多关系的数据 结构。
逻辑特征是:可以有任意个开始结点和任意个终端结 点,其余各个结点可以有任意个前趋和任意个后继。 图中的结点常称为顶点。
图的逻辑结构可以用二元组表示: Graph=(V,E) V是顶点(vertex)的集合; E是边(edge)的集合。
入边表
3 4^
4^
边集数组
邻接表法(Adjacency List)是图的一种链式存储结构
边集数组(edgeset array)是图的一种顺序存储方式,利用一维数组
来存储图中所有的边,数组中的每个元素用来存储图中的一条边,包
括:始点、终点的序号及权值,该数组中所含元素的个数要大于等于
图中边的条数。
顶点表和各顶点的边表一起组成图的邻接表。
边表结点
adjvex next
顶点表结点
vertex link
邻接表存储结构C语言描述如下:
typedef struct node
{ int adjvex;
/* 邻接点域 */
struct node *next;
/* 指针域 */
}edgenode;
/* 定义边表结点 */
/* 边的始点域 */ /* 边的终点域 */
/* 边的权值域 */ /* 定义边集数组类型 */ /* 边集数组全局量 */
§6.3 图的遍历
深度优先遍历(DFS)
方法:对于给定的图G,假设初始时所有顶点均未被访问过,则 可从G中任选一顶点vi做为初始出发点,深度优先搜索可定义为: 访问出发点vi,置访问标记为1,然后依次从vi的未被访问过的邻 接点vj出发,继续进行深度优先搜索,直至图中所有和vi有路径 相通的顶点均被访问过。很显然图的深度优先搜索过程是递归的。 它的特点是尽可能先对图从纵深方向进行搜索,故称为深度优先 搜索。

数据结构第六章二叉树的应用教案

数据结构第六章二叉树的应用教案

6.3 哈夫曼树
• • 最优树的定义 如何构造最优树
6.3.1 基本术语
路径和路径长度
若在一棵树中存在着一个结点序列 k1,k2,…,kj,使得ki是ki+1的 双亲(1≤i<j),则称此结点序列是 从k1到kj的路径从k1到kj所经过的 分支数称为这两点之间的路径长度
结点的权和带权路径长度
权 给结点赋上一个有某种意义 的实数,我们称为权。 带权路径长度 从根结点到该结点之间路径 长度与该结点上权的乘积。
23 设 key = 48
T
20 10 T 23 T 25
T T
30
T
40 35 T
bool Find(BTreeNode* T, ElemType& item) if(T==NULL) return false; //查找失败 else { if(item==T->data) { item=T->data; return true; } else if(item<T->data) //向左子树继续查找 return Find(T->left, item); else return Find(T->right, item); } //向右子树继续查找
ri r2i ri r2i 1
(小顶堆)

ri r2i ri r2i 1
(大顶堆)
12, 36, 27, 65, 40, 34, 98, 81, 73, 55, 49
是小顶堆
12, 36, 27, 65, 40, 14, 98, 81, 73, 55, 49
不是堆
子树上查找;
3)大于根结点的关键字,则继续在右
子树上查找。

数据结构教案(第六章)

数据结构教案(第六章)
理解哈夫曼树的定义及基本概念
熟练掌握哈夫曼树的构造方法
理解哈夫曼树的构造算法
理解哈夫曼编码
了解哈夫曼编码和译码算法
教学内容
一、分析本章案例,由学生课后完成
二、上机完成案例。
要求:
利用所学的哈夫曼树知识,构建一棵哈夫曼树,并实现编码功能。
作业布置
完成本次课程实验报告
教学后记
5.给出二叉树的定义,分析根据二叉树的定义得出的二叉树的基本形态
6.给出两种特殊形态的二叉树——满二叉树和完全二叉树的定义,说明其特点
7.推导、证明二叉树的基本性质
8.介绍二叉树的抽象数据类型
作业布置
习题6
一.1,2,7~10 二.2,4,5,6 三.1,2,3,4 四 五. 1~4
教学后记
教 案(理论课)
重点
难点
重点:
1.树、森林与二叉树之间的转换
2.树与森林的遍历
3. 线索二叉树的定义
难点:
1.树、森林与二叉树之间的转换
2.线索二叉树的定义
要求掌握知识点和分析方法
掌握树、森林与二叉树之间的转换
熟练掌握树与森林的遍历
理解线索二叉树的定义
教学设计
1.从应用的角度分析树、森林和二叉树转换的意义
2.分析树、森林和二叉树转换中的几个特点:树的孩子兄弟表示法与二叉树的二叉链表表示法的相似之处,引入转ቤተ መጻሕፍቲ ባይዱ方法。利用算法动态演示,形象展示转换方法。
教学后记
教 案(理论课)
第 19 次课 2 学时
章节
第六章树
6.5哈夫曼树及其应用
讲授主要内容
哈夫曼树的基本概念;哈夫曼树的构造方法;哈夫曼编码
重点
难点

《数据结构(C语言)》第6章 图

《数据结构(C语言)》第6章 图
点vj是连通的;若图中任意两个顶点之间都存在两条 互为反方向的路径,即从vi到vj及从vj到vi都有路径 ,则称此有向图为强连通图。有向图中的极大连通子 图称作该有向图的强连通分量。例如,图6.5中的 G5就是一个强连通图。而G6就是非强连通图,但有 2个强连通分量,如图6.6所示。
Data structures
图的定义和基本术语
❖ 图的定义
❖ 2.图的基本术语
v1
v2
v1
v2 v1
v2
v4
v3
v4
v3 v4
v3
图6.5强连通图G5 图6.6非强连通图G6及两个连通分量
Data structures
图的定义和基本术语
❖ 图的定义 ❖ 2.图的基本术语
(15)生成树 连通图G的生成树,是包含G的全部n个顶点的一个
Data structures
图的定义和基本术语
❖ 图的定义 ❖ 2.图的基本术语
(13)连通图、连通分量 无向图G中,如果从顶点vi到顶点vj有路径,则称顶
点vi和vj是连通的。如果对于图中任意两个顶点vi、 vj∈V,vi和vj都是连通的,则称图G为连通图 (Connected Graph)。 在无向图中,在满足连通条件时,尽可能多地包含原 图中的顶点和这些顶点之间的边的连通子图称为该图 的连通分量(Connected Component);连通图 的连通分量是它本身,非连通图的连通分量可能为多 个。例如:图6.3中的G3就是一个连通图。而G4就 是非连通图,但有2个连通分量,如图6.4所示。
Data structures
图的定义和基本术语
❖ 图的定义 ❖ 2.图的基本术语
(12)简单路径、回路、简单回路 顶点序列中顶点不重复出现的路径,称为简单路径;

数据结构授课教案-第6章

数据结构授课教案-第6章
在现实中的应用:
如族谱、各种社会组织机构等。
在计算机领域:
编译程序中的语法树、数据库系统中的索引等。
6.1树的定义和基本术语
1、树的定义
树是由n(n≥0)个结点组成的有限集合。
如果n= 0,称为空树;
否则,在一棵非空树中,满足如下两个条件:
(1)有一个特定的称之为根(root)的结点,它只有直接后继,但没有直接前驱;
3)二叉树是递归结构,在二叉树的定义中又用到了二叉树的概念;
2、二叉树的五种不同形态
3、二叉树和树的区别:
二叉树不是树的特殊情形,它们是两个概念。
树和二叉树之间最主要的差别是:二叉树中结点的子树要区分为左子树和右子树,即使在结点只有一棵子树的情况下也要明确指出该子树是左子树还是右子树。
6.2.2二叉树的性质
性质5:对于具有n个结点的完全二叉树,如果按照从上到下和从左到右的顺序对二叉树中的所有结点从1开始顺序编号,则对于任意的序号为i的结点有:
(1)如i=1,则序号为i的结点是根结点,无双亲结点;如i>1,则序号为i的结点的双亲结点序号为└i/2┘。
(2)如2×i>n,则序号为i的结点无左孩子;如2×i≤n,则序号为i的结点的左孩子结点的序号为2×i。
祖先(ancestor)结点:若树中结点k到ks存在一条路径,则称k是ks的祖先
子孙(descendant)结点:若树中结点k到ks存在一条路径,则称ks是k的子孙
结点所处层次(level) :根结点的层数为1,其余结点的层,其余结点的层数为双亲结点的层数加1
树的高度(depth):树中结点的最大层数
完全二叉树:若设二叉树的高度为h,除第h层外,其它各层的结点数都达到最大个数,第h层的结点集中出现在左端若干连续位置上,这就是完全二叉树。

数据结构第6章图

数据结构第6章图

2020/3/4
6.1 图的逻辑结构
15 of 169
图的基本术语
稀疏图:称边数很少的图为稀疏图;
稠密图:称边数很多的图为稠密图。
顶点的度:在无向图中,顶点v的度是指依附于该顶 点的边数,通常记为TD (v)。 顶点的入度:在有向图中,顶点v的入度是指以该顶 点为弧头的弧的数目,记为ID (v); 顶点的出度:在有向图中,顶点v的出度是指以该顶 点为弧尾的弧的数目,记为OD (v)。
6.1 图的逻辑结构
19 of 169
图的基本术语
路径:在无向图G=(V, E)中,从顶点vp到顶点vq之间的 路径是一个顶点序列(vp=vi0,vi1,vi2, …, vim=vq),其中, (vij-1,vij)∈E(1≤j≤m)。若G是有向图,则路径也是有 方向的,顶点序列满足<vij-1,vij>∈E。
2020/3/4
6.1 图的逻辑结构
21 of 169
图的基本术语
非带权图——路径上边的个数 路径长度:
带权图——路径上各边的权之和
V1
8 2
V4
2
V2
3
V3 6 5
V5
V1 V4:长度为8 V1 V2 V3 V4 :长度为7 V1 V2 V5V3 V4 :长度为15
2020/3/4
6.1 图的逻辑结构
6.1 图的逻辑结构
10 of 169
图的基本术语
邻接、依附
有向图中,对于任意两个顶点vi和顶点vj,若存在弧 <vi,vj>,则称顶点vi邻接到顶点vj,顶点vj邻接自顶 点vi,同时称弧<vi,vj>依附于顶点vi和顶点vj 。
V1
V2
V1的邻接点: V2 、V3

精品课件-数据结构实用教程(C语言版)-第六章 图

精品课件-数据结构实用教程(C语言版)-第六章 图

对顶点的访问操作
LocateVex(G, u); // 若G中存在顶点u,则返回该顶点在 // 图中“位置” ;否则返回其它信息。
GetVex(G, v);
// 返回 v 的值。
PutVex(&G, v, value); // 对 v 赋值value。
对邻接点的操作
FirstAdjVex(G, v); // 返回 v 的“第一个邻接点” 。若该顶点 // 在 G 中没有邻接点,则返回“空”。
在图结构中,对结点(图中常称为顶点)的前趋和后继个数都 是不加限制的,即结点之间的关系是任意的。图中任意两个结 点之间都可能相关。
由此,图的应用极为广泛,特别是近年来的迅速发展,已渗透 到诸如语言学、逻辑学、物理、化学、电讯工程、计算机科学 以及数学的其它分支中。
6.1 图的基本概念
6.1.1 图的结构定义:
1
3
6 回路:1,2,3,5,6,3,1
G1
简单回路:3,5,6,3
例 1
57
32 4 6 G2
路径:1,2,5,7,6,5,2,3 路径长度:7 简单路径:1,2,5,7,6 回路:1,2,5,7,6,5,2,1 简单回路:1,2,3,1
无向图G中,若从顶点v到顶点w有路径,则称v和w是连通 的;若图G中任意两个顶点之间都有路径相通,则称此图为连 通图;否则,称之为非连通图。
NextAdjVex(G, v, w); // 返回 v 的(相对于 w 的)“下一个邻接点”。 // 若w是v的最后一个邻接点,则返回“空”。
插入或删除顶点
InsertVex(&G, v);
//在图G中增添新顶点v。
DeleteVex(&G, v); // 删除G中顶点v及其相关的弧。

数据结构 第6章 图

数据结构 第6章 图

数据结构第6章图在计算机科学中,数据结构是组织和存储数据的方式,以便能够有效地进行操作和访问。

而图,作为数据结构中的一个重要概念,在解决许多实际问题中发挥着关键作用。

图是由一组顶点和一组连接这些顶点的边所组成。

顶点可以表示各种实体,比如城市、人、网页等等;边则表示顶点之间的关系,比如城市之间的道路连接、人与人之间的社交关系、网页之间的链接。

从形式上看,图可以分为无向图和有向图。

无向图中,边没有方向,也就是说,如果顶点 A 和顶点 B 之间有一条边,那么从 A 能到达 B,从 B 也能到达 A。

而在有向图中,边是有方向的,比如从顶点 A 指向顶点 B 的边,意味着只能从 A 到达 B,而不能反过来。

图的存储方式有多种,常见的有邻接矩阵和邻接表。

邻接矩阵是一个二维数组,如果顶点 i 和顶点 j 之间有边相连,那么数组中的第 i 行第 j 列和第 j 行第 i 列(对于无向图)或者第 i 行第 j 列(对于有向图)的值为 1,否则为 0。

邻接矩阵的优点是查询边的存在与否非常快速,但缺点是对于稀疏图(边的数量相对顶点数量较少的图)会浪费大量的存储空间。

邻接表则是为每个顶点建立一个链表,链表中存储与该顶点相邻的其他顶点。

这种方式对于稀疏图来说,能够节省大量的存储空间,但在查询边的存在时可能相对较慢。

在对图进行操作时,遍历是一个重要的算法。

常见的图遍历算法有深度优先遍历和广度优先遍历。

深度优先遍历就像是在一个迷宫中,选择一条路一直走到底,直到走不通了再回溯。

具体来说,从一个起始顶点开始,先访问该顶点,然后递归地访问其未被访问过的相邻顶点。

这种遍历方式能够深入探索图的结构,但可能会导致某些部分的图被较晚访问到。

广度优先遍历则像是以起始顶点为中心,逐层向外扩展访问。

首先访问起始顶点,然后依次访问其所有相邻顶点,再依次访问这些相邻顶点的相邻顶点,以此类推。

这种遍历方式能够先访问距离起始顶点较近的顶点。

图在实际应用中有着广泛的用途。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录第6章图 (2)6.1图的定义和基本术语 (2)6.2图的存储和创建 (3)6.2.1 图的存储表示 (3)6.2.2 图的创建 (6)6.3图的遍历 (6)6.3.1 深度优先搜索 (6)6.3.2 广度优先搜索 (7)6.4遍历算法的应用 (8)6.4.1 应用问题概述 (8)6.4.2 求一条包含图中所有顶点的简单路径 (9)6.4.3 求距v0最短路径长度最长的一个顶点 (10)6.5图的连通性问题 (11)6.5.1 无向图的连通分量和生成树 (11)6.5.2 最小生成树 (13)6.6有向无环图及其应用 (13)第6章图6.1 图的定义和基本术语1、图的特征任意两个数据元素之间都可能相关。

结点之间的关系是多对多的。

G = (V,{E})2、基本术语结点:顶点结点间的关系:无向图:边(v,w),v与w互为邻接点,边(v,w)依附于顶点v,w,边(v,w)和顶点v,w相关联v的度:和v相关联的边的数目。

有向图:弧<v,w>,v弧尾,w弧头,顶点v邻接到顶点w,顶点w邻接自顶点v,弧<v,w>和顶点v,w相关联。

v的入度:以v为头的弧的数目;v的出度:以v为尾的弧的数目;v的度:v的入度与出度之和。

路径、回路(环)、简单路径、简单回路(简单环)连通性:若从顶点v到顶点v’有路径,则称v和v’是连通的图的规模:顶点数n、边(弧)数e、顶点的度(有向图:入度/出度)子图:G’= (V’,{E’}), G = (V,{E}),若V’⊆V且E’ ⊆E,则称G’是G的子图。

图的分类:1)关系的方向性(无向/有向)、关系上是否有附加的数——权(图/网)有向图、无向图、有向网、无向网2)边(弧)数:完全图(边数=n(n-1)/2的无向图)、有向完全图(弧数=n(n-1)的有向图)稀疏图(e<n log n)、稠密图(e>n log n)3)连通性:无向图:连通图(任意两顶点都是连通的)、连通分量(极大连通子图)、生成树(极小连通子图)、生成森林有向图:强/弱连通图、强连通分量、生成树(极小连通子图)、生成森林3、抽象数据类型定义ADT Graph{数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。

数据关系R:R = {VR}VR = {<v,w>|v,w∈V且P(v,w),<v,w>表示从v到w的弧,谓词P(v,w)定义了弧<v,w>的意义或信息}基本操作:CreateGraph(&G, V, VR)初始条件:V是图的顶点集,VR是图中弧的集合操作结果:按V和VR的定义构造图GDestroyGraph(&G)初始条件:图G存在操作结果:销毁图GLocateV ex(G,u)它信息GetVex(G, v)初始条件:图G存在,v是G中某个顶点操作结果:返回v的值PutVex(&G, v, value)初始条件:图G存在,v是G中某个顶点操作结果:对v赋值valueFirstAdjVex(G, v)初始条件:图G存在,v是G中某个顶点操作结果:返回v的第一个邻接顶点。

若顶点在G中没有邻接顶点,则返回“空”NextAdjVex(G, v, w)初始条件:图G存在,v是G中某个顶点,w是v的邻接顶点操作结果:返回v的(相对于w的)下一个邻接顶点。

若w是v的最后一个邻接点,则返回“空”InsertV ex(&G, v)初始条件:图G存在,v和G中顶点有相同特征操作结果:在图中增添新顶点vDeleteV ex(&G, v)初始条件:图G存在,v是G中某个顶点操作结果:删除G中顶点v及其相关的弧InsertArc(&G, v, w)初始条件:图G存在,v和w是G中两个顶点操作结果:在图G中增添弧<v,w>,若G是无向的,则还应增添对称弧<w,v>DeleteArc(&G, v, w)初始条件:图G存在,v和w是G中两个顶点操作结果:删除G中的弧<v,w>,若G是无向的,则还应删除对称弧DFST raverse(G, v, visit())初始条件:图G存在,v是G中某个顶点,visit是对顶点的应用函数操作结果:从顶点v起深度优先遍历图G,并对每个顶点调用函数visit()一次且至多一次。

一旦visit()失败,则操作失败BFST raverse(G, v, visit())初始条件:图G存在,v是G中某个顶点,visit是对顶点的应用函数操作结果:从顶点v起广度优先遍历图G,并对每个顶点调用函数visit()一次且至多一次。

一旦visit()失败,则操作失败}ADT Graph6.2 图的存储和创建6.2.1 图的存储表示1、图的存储表示分析∵顶点之间的关系是多对多的(m:n),由于m和n都是不定的,无法给出一个这种多对多的关系向线性关系的映射公式∴图中的关系不能通过顺序映像(即通过顶点之间的存储位置反映顶点之间的逻辑关系)反类(有向图、无向图、有向网、无向网)顶点集的存储:∵图的应用中,顶点集动态变化的几率十分小∴顶点集可以采用顺序表存储,按预先估计的最大顶点数分配空间(顺序表和链表:若数据元素集是静态的,采用顺序表要好(随机存取);若数据元素集是动态的,则采用链表要好(动态分配与释放))#define MAX_VERTEX_NUM 20 /* 最大顶点数*/注意:顺序表与顺序映像之间的区别关系集的存储:在顶点确定的情况下,边或弧的数目也是不定的,且在实际应用中,可能会改变图中的顶点之间的关系。

邻接矩阵表示法:矩阵中的第i行第j列的元素反映图中第i个顶点到第j个顶点是否存在弧,若存在其附加的信息是什么。

邻接表表示法:将每一顶点的邻接点位置串成一个链,称为邻接表。

对于有向图/网来说,该邻接表反映的是顶点的出边表。

typedef enum{DG, DN, AG, AN} GraphKind; /*{有向图,有向网,无向图,无向网}*/2、邻接矩阵表示法(数组表示法)无向图/网:对称矩阵有向图/网:非对称矩阵图:邻接关系用1/0表示网:邻接关系需要进一步反映权值,用INFINITY表示无穷大,反映顶点之间无邻接关系#define INT_MAX 32767 /* 最大整数*/#define INFINITY INT_MAX1)邻接矩阵typedef struct ArcCell{int adj; /* 顶点间关系,无权图:0-不相邻,1-相邻有权图,权值,INFINITY-不相邻*/InfoType *info; /* 该弧相关信息的指针*/}ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];2)图的整体结构typedef struct {c har vexs[MAX_VERTEX_NUM]; /* 有效的顶点下标从0开始*/A djMatrix arcs; /* 关系集*/i nt vexnum, arcnum; /* 顶点数、边/弧数*/G raphKind kind; /* 图的种类*/}MGraph;3、邻接表表示法无向图/网:边表,表结点的个数为边数的两倍有向图/网:出边表,表结点的个数为弧数1)邻接表的表结点typedef struct ArcNode{i nt adjvex; /* 弧所指向的顶点的位置*/s truct ArcNode *nextarc; /* 指向下一条弧的指针*/InfoType *info;typedef struct VNode{c har data; /* 顶点信息 */A rcNode *firstarc; /*邻接表指针*/}VNode, AdjList[MAX_VERTEX_NUM];3)图的整体结构typedef struct {A djList vertices;i nt vexnum, arcnum;G raphKind kind;}ALGraph;4、邻接矩阵与邻接表的对比假设图为G,顶点数为n,边/弧数为e。

6.2.2 图的创建基本过程:1)输入图的类型,根据类型选择相应的创建算法2)输入图的顶点数,边/弧数3)输入并存储顶点信息4)输入边/弧所关联的顶点对,将边或弧的信息存储到邻接矩阵/邻接表中图的存储结构不同、图的类型不同,都会影响创建算法的实现细节;但是,图的总体创建流程是一致的(如上)。

示例:用邻接矩阵表示法构造有向网GStatus CreateMDG(MGraph &G){/* 步骤2:输入图的顶点数、边/弧数*/scanf(&G.vexnum, &G.arcnum, &IncInfo); /* IncInfo为0则各弧不含其它信息*//* 步骤3:输入并存储顶点信息*/for ( i = 0; i < G.vexnum ; i++) scanf ( &G.vexs[i] );/* 步骤4:输入并存储边/弧信息*/for ( i = 0; i < G.vexnum ; i++) /* 邻接矩阵初始化*/for ( j = 0; j < G.vexnum ; j++)G.arcs[i][j] = {INFINITY, NULL};for ( k = 0; k < G.arcnum ; k++){scanf(&v1, &v2, &w);i = LocateV ex(G, v1); j = LocateV ex(G, v2);G.arcs[i][j].adj = w;if ( IncInfo) Input( *G.arcs[i][j].info); /* *G.arcs[i][j].info要求G.arcs[i][j].info指向的空间在调用Input()前分配 */ }}6.3 图的遍历6.3.1 深度优先搜索1、分析·类似于树的先序遍历·引入访问标志数组visit[0:n-1],区分顶点是否已被访问·非连通图,需引入多个深度优先搜索的起始顶点·递归算法或基于栈的非递归算法2、基于逻辑结构的算法Boolean visited[MAX_VERTEX_NUM];void DFSTraverse(Graph G){for ( v = 0; v < G.vexnum; ++ v) visited[v] = FALSE;for ( v = 0; v < G.vexnum; ++ v)if ( !visited[v] ) DFS(G, v);}void DFS(Graph G, int v)for ( w = FirstAdjV ex( G, v); w; w = NextAdjV ex(G, v, w) )if ( !visited[w] ) DFS(G, w);}3、基于某种存储结构的算法根据选择的存储结构,决定FirstAdjV ex()和NextAdjV ex()的实现,重新整合算法。

相关文档
最新文档