数据结构:第六章 图

合集下载

北邮数据结构第六章答案详解 图(1)

北邮数据结构第六章答案详解 图(1)

1
5
1
54 3
42
5 66
图 6-8 图 G 答案:根据不同算法构造的最小生成树如图 6-9 所示的图(a)和(b)
2

⑤ 5
1

4 3


6
2

③ 5
1

4 3


6
(a) Prim 生成树
(b) Kruskal 生成树
图 6-9 最小生成树
5、算法设计
(1)以邻接表为存储结构,设计实现深度优先遍历的非递归算法。
int top = -1; cout<<v<<’\t’; bVisited[v] = true; stack[++top] = v;
//访问结点 v //设置访问标记 //结点 v 入栈
while (top!=-1)
{
v=stack[top];
ArcNode<T> *p = adjlist[v]. firstarc; ①
)
A.1
B. n/2
C.n-1
D.n
解析:若超过 n-1,则路径中必存在重复的顶点
答案:C
(5) 若一个图中包含有 k 个连通分量,若按照深度优先搜索的方法访问所有顶点,则必
须调用(
)次深度优先搜索遍历的算法。
A.k
B.1
C.k-1
D.k+1
解析:一次深度优先搜索可以访问一个连通分量中的所有结点,因此 k 个连通分量需要 调用 k 次深度优先遍历算法。

} if (p==NULL) top--;
⑤//若是找不到未访问的结点,出栈

数据结构-第6章 树和二叉树---4. 树和森林(V1)

数据结构-第6章 树和二叉树---4. 树和森林(V1)
ElemType data ; struct CSnode *firstchild, *nextsibing ; }CSNode;
6.4.1 树的存储结构
R AB C D EG F
R⋀
A
⋀D
⋀B
⋀E ⋀
C⋀
⋀G
⋀F ⋀
6.4.2 树、森林和二叉树的转换
1. 树转换为二叉树 将树转换成二叉树在“孩子兄弟表示法”中已 给出,其详细步骤是: ⑴ 加线。在树的所有相邻兄弟结点之间加一 条连线。 ⑵ 去连线。除最左的第一个子结点外,父结点 与所有其它子结点的连线都去掉。 ⑶ 旋转。将树以根结点为轴心,顺时针旋转 450,使之层次分明。
B C
D
A E
L HK
M
技巧:无左孩子 者即为叶子结点
6.4.3 树和森林的遍历
1. 树的遍历 由树结构的定义可知,树的遍历有二种方法。 ⑴ 先序遍历:先访问根结点,然后依次先序 遍历完每棵子树等。价于对应二叉树的先序遍历
⑵ 后序遍历:先依次后序遍历完每棵子树,然 后访问根结点。等价于对应二叉树的中序遍历
0 R -1 1A 0 2B 0 3C 0
}Ptree ; R
4D 1 5E 1
AB C
6F 3
7G 6
DE
F
8H 6
9I 6
G H I 10~MAX_Size-1 ... ...
6.4.1 树的存储结构
2. 孩子表示法
每个结点的孩子结点构成一个单链表,即有n 个结点就有n个孩子链表;
n个孩子的数据和n个孩子链表的头指针组成一 个顺序表; 结点结构定义: 顺序表定义:
typedef struct PTNode { ElemType data ;

《数据结构(C语言版 第2版)》(严蔚敏 著)第六章练习题答案

《数据结构(C语言版 第2版)》(严蔚敏 著)第六章练习题答案

《数据结构(C语言版第2版)》(严蔚敏著)第六章练习题答案第6章图1.选择题(1)在一个图中,所有顶点的度数之和等于图的边数的()倍。

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

A.1/2B.1C.2D.4答案:B解释:有向图所有顶点入度之和等于所有顶点出度之和。

(3)具有n个顶点的有向图最多有()条边。

A.n B.n(n-1)C.n(n+1)D.n2答案:B解释:有向图的边有方向之分,即为从n个顶点中选取2个顶点有序排列,结果为n(n-1)。

(4)n个顶点的连通图用邻接距阵表示时,该距阵至少有()个非零元素。

A.n B.2(n-1)C.n/2D.n2答案:B所谓连通图一定是无向图,有向的叫做强连通图连通n个顶点,至少只需要n-1条边就可以了,或者说就是生成树由于无向图的每条边同时关联两个顶点,因此邻接矩阵中每条边被存储了两次(也就是说是对称矩阵),因此至少有2(n-1)个非零元素(5)G是一个非连通无向图,共有28条边,则该图至少有()个顶点。

A.7B.8C.9D.10答案:C解释:8个顶点的无向图最多有8*7/2=28条边,再添加一个点即构成非连通无向图,故至少有9个顶点。

(6)若从无向图的任意一个顶点出发进行一次深度优先搜索可以访问图中所有的顶点,则该图一定是()图。

A.非连通B.连通C.强连通D.有向答案:B解释:即从该无向图任意一个顶点出发有到各个顶点的路径,所以该无向图是连通图。

(7)下面()算法适合构造一个稠密图G的最小生成树。

A.Prim算法B.Kruskal算法C.Floyd算法D.Dijkstra算法答案:A解释:Prim算法适合构造一个稠密图G的最小生成树,Kruskal算法适合构造一个稀疏图G的最小生成树。

(8)用邻接表表示图进行广度优先遍历时,通常借助()来实现算法。

A.栈 B.队列 C.树D.图答案:B解释:广度优先遍历通常借助队列来实现算法,深度优先遍历通常借助栈来实现算法。

北京林业大学《数据结构与算法》课件PPT 第6章 图

北京林业大学《数据结构与算法》课件PPT 第6章 图
顶点的入度均为1,此时是何形状? 答:是树!而且是一棵有向树!
北京林业大学信息学院
路径:接续的边构成的顶点序列。 路径长度:路径上边或弧的数目/权值之和。 回路(环):第一个顶点和最后一个顶点相同的路径。 简单路径:除路径起点和终点可以相同外,其余顶点均不相同
的路径。 简单回路(简单环):除路径起点和终点相同外,其余顶点均不
• 原来烤肉店老板是伊拉克移民,有个朋友住在加州 ,刚好这个朋友的同事,是电影《这个男人有点色 》的制作人的女儿在女生联谊会的结拜姐妹的男朋 友,而马龙·白兰度主演源自这部片子。北京林业大学信息学院
验证—数据
• 微软的研究人员过滤2006年某个单一月份 的MSN短信
• 利用二点四亿使用者的三百亿通讯息进行 比对,结果发现任何使用者只要通过平均 6.6人就可以和全数据库的一千八百亿组配 对产生关连。
相同的路径。
北京林业大学信息学院
连通图(强连通图)
在无(有)向图G=( V, {E} )中,若对任何两个顶点 v、u 都存在从v 到 u 的路径,则称G是连通图(强 连通图)。
连 通 图
V0
V1
V2
V3
V4
V0 V3
V1 V4
非 连

V2 V5 图
强 V0
V1


图 V2
V3
北京林业大学信息学院
V0
北京林业大学信息学院
验证—实例
• 烤肉店老板——加州朋友——朋友同事—— 制作人的女儿——制作人——马龙·白兰度
• 一家德国报纸接受了一项挑战,要帮法兰克福的一 位土耳其烤肉店老板,找到他和他最喜欢的影星马 龙·白兰度的关联。
• 经过几个月,报社的员工发现,这两个人只经过不 超过六个人的私交,就建立了人脉关系。

数据结构第六章图理解练习知识题及答案解析详细解析(精华版)

数据结构第六章图理解练习知识题及答案解析详细解析(精华版)

图1. 填空题⑴设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。

【解答】0,n(n-1)/2,0,n(n-1)【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。

⑵任何连通图的连通分量只有一个,即是()。

【解答】其自身⑶图的存储结构主要有两种,分别是()和()。

【解答】邻接矩阵,邻接表【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。

⑷已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。

【解答】O(n+e)【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。

⑸已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。

【解答】求第j列的所有元素之和⑹有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。

【解答】出度⑺图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。

【解答】前序,栈,层序,队列⑻对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。

【解答】O(n2),O(elog2e)【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。

⑼如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。

【解答】回路⑽在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。

【解答】vi, vj, vk【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。

云大《数据结构》课程教学课件-第6章 树和二叉树(147P)_OK

云大《数据结构》课程教学课件-第6章 树和二叉树(147P)_OK

^d ^ ^ e ^ 三叉链表
3)二叉链表是二叉树最常用的存储结构。还有其它链接方 法,采用何种方法,主要取决于所要实施的各种运算频度。
例:若经常要在二叉树中寻找某结点的双亲时,可在每个结 点上再加一个指向其双亲的指针域parent,称为三叉链表。
lchild data parent rchild
2021/8/16
2021/8/16
9
6.2 二 叉 树
6.2.1 二叉树的概念
一、二叉树的定义: 二叉树(Binary Tree)是n(n>=0)个结点的有限集,它或者是 空集(n=0)或者由一个根结点和两棵互不相交的,分别称 为根的左子树和右子树的二叉树组成。 可以看出,二叉树的定义和树的定义一样,均为递归定 义。
A
集合3
集合1
BCD
EF
G
集合2
2021/8/16
3
2、树的表示方法 1)树形图法
A
BCD
EF
G
2)嵌套集合法
3)广义表形式 ( A(B, C(E,F), D(G) )
4)凹入表示法
2021/8/16
A B
D
CG
EF
A B C E DF G
4
3、 树结构的基本术语
1)结点的度(Degree):为该结点的子树的个数。 2)树的度:为该树中结点的最大度数。
7)路径(Path):若树中存在一个结点序列k1,k2,…,kj,使得ki是 ki+1的双亲(1<=i<j),则称该结点序列是从ki到kj一条路径 (Path)
路径长度:路径的长度为j-1,其为该路径所经过的边的数 目。
A
BCD
EF
G

数据结构与算法分析

数据结构与算法分析

路径
1.
2.
3. 4. 5.
6.
在无向图G 中,若存在一个顶点序列vp ,vi1 , vi2 , …vim ,vq,使得 (vp ,vi1),(vi1 ,vi2), …,(vim ,vq )∈E(G),则称顶点序列 (vp ,vi1),(vi1 ,vi2), …,(vim ,vq )∈E(G) 为从vp到vq的一条 (Path)。 在有向图G 中,若存在一个顶点序列vp ,vi1 , vi2 , …vim ,vq,使得有 向边<vp ,vi1>, <vi1 ,vi2>, …,<vim ,vq >∈E(G),则称顶点vp路到vq有 一条有向路径(Path)。 无权图的路径长度是指此路径上边的条数。 有权图的路径长度是指路径上各边的权之和。 简单路径:若路径上各顶点vp ,vi1 , vi2 , …vim ,vq均不互相同, 则称这 样的路径为简单路径。 环:若简单路径长度大于2,且第一个顶点v1 与最后一个顶点vm 重 合, 则称这样的简单路径为回路或环。
3 0 1 0 1 6 4 2
3
0 1
4
2
3
2
6
5
4
5
G的连通分量
6
5
是连通分量吗?
无向图G
强连通


在有向图中, 若一对顶点vi和vj存在一条从vi到vj和从vj到vi的路径, 则 称vi和vj是强连通的。 若有向图中任意两个顶点都是强连通的,则称该图为强连通图。 有向图的极大强连通子图称为图的强连通分量 例:

0 1 3
2 4
无向图G1
有向图
若图G的每条边都有方向,则称G为有向图(Digraph)。 有向边(即弧)由两个顶点组成的有序对来表示,记为< 起始点,终止点y> (也可称<弧尾,弧头>)。 举例: V(G2)={0,1,2,3,4} E(G2)={<0,3>,<1,0>,<1,2>,<3,1>,<3,4>,<4,2>}

数据结构第6章树和二叉树3树和森林ppt课件

数据结构第6章树和二叉树3树和森林ppt课件

§6.4 树和森林 ❖树的存储结构——孩子兄弟表示法
这种存储结构便于实现各种树的操作。首先易于 实现找结点孩子等的操作。如果为每个结点增设一个 (parent)域,则同样能方便地实现Parent(T, x)操作。
§6.4 树和森林
❖森林和二叉树的转换
1. 树和二叉树的对应关系 由于二叉树和树都可用二叉链表作为存储结构,
R AB C
DE
F
GHK
R^
A
^D
^B
^E ^
C^
F^
^G
^H
^K ^
§6.4 树和森林
❖树的二叉链表(孩子 - 兄弟)存储表示
typedef struct CSNode { Elem data; struct CSNode *firstchild , *nextsibling;
} CSNode, *CSTree;
A BC D E F GH
A BC D
E F GH A
BC D
1)在兄弟之间加一条连线; 2)对每个结点,除了左孩子外,去除其与其余孩子之间的联系; 3)以根结点为轴心,将整个树顺时针转45°。
Ia
A B
Ib
E F
d
C D
G H I
c E F G H I
§6.4 树和森林
❖森林和二叉树的转换
2. 森林和二叉树的对应关系 从树的二叉链表表示的定义可知,任何一棵
§6.4 树和森林
3
6^
5^
0
1
7
8
2^ 9^
R AB C
DE
F
GHK
§6.4 树和森林 ❖树的存储结构——孩子兄弟表示法
或称二叉树表示法,或称二叉链表表示法。即以 二叉链表作树的存储结构。链表中结点的两个链域分 别指向该结点的第一个孩子结点和下一个兄弟结点。

《数据结构——C语言描述》第6章:树

《数据结构——C语言描述》第6章:树
Void paintleaf (Btree root) { if (root!=NULL) { if (root ->Lchild==NULL && root ->Rchild==NULL) printf (root ->data); paintleaf (root ->Lchild); paintleaf (root -遍历左子树; (2)访问根结点; (3)中根遍历右子树。 后根遍历二叉树 (1)后根遍历左子树; (2)后根遍历右子树; (3)访问根结点。
先根遍历: -+a*b–cd/ef 中根遍历: a+b*c–d–e/f 后根遍历: abcd-*+ef/-
typedef struct Node { datatype data; struct Node *Lchild; struct Node *Rchild; } BTnode,*Btree;
满二叉树:一棵深度为k且有2k-1个结 点的二叉树称为满二叉树。 完全二叉树:深度为k,有n个结点的 二叉树当且仅当其每一个结点都与深度 为k的满二叉树中编号从1至n的结点一一 对应时,称为完全二叉树。
1 2 4 8 9 10 5 11 12 6 13 14 3 7 15 4 6 2
1 3 5 7
树的度:树中最大的结点的度数即为 树的度。图6.1中的树的度为3。 结点的层次(level):从根结点算起, 根为第一层,它的孩子为第二层……。 若某结点在第l层,则其孩子结点就在 第l+1层。图6.1中,结点A的层次为1, 结点M的层次为4。 树的高度(depth):树中结点的最大层 次数。图6.1中的树的高度为4。 森林(forest):m(m≥0)棵互不相交的 树的集合。

数据结构与算法-第6章

数据结构与算法-第6章

如果 e=(u, v) 是 E(G) 中的一条边,则称 u 与 v
互为邻接点或相邻点;称边e与顶点u,v关联;
如果 a=<u, v> 是 E(G) 中的一条弧,则称u邻接到v
或v邻接于u,也称弧a与顶点u,v关联.
9
6.1 图的基本概念
顶点的度(与树中结点的度不同): –无向图中,顶点的度是与每个顶点关联的边数, 记作TD(v) –有向图中,顶点的度分成入度与出度 •入度:以该顶点为终头的弧的数目,记为ID(v) •出度:以该顶点为始点的弧的数目,记为OD(v) 一个顶点的度等于该顶点的入度与出度之和,即 TD(v)=OD(v)+ID(v)
20
带权图的邻接矩阵
wij 若(vi,vj)∈E或<vi,vj>∈E
A[i][j]= ∞ 其它 0 i=j
21
用邻接矩阵表示的图的类的定义
class AdjMatrix { int n; int matrix[MaxSize][ MaxSize]; public: AdjMatrix(int m) { n=m; } }; // AdjMatrix class AdjMatrix { const int INFINITE=∞; int n; float matrix[MaxSize][MaxSize]; public: AdjMatrix(int m) { n=m;} }; // AdjMatrix // 非带权图 // 顶点的个数 // 邻接矩阵
回路——第一个顶点和最后一个顶点相同的路径。
简单回路——除了第一个顶点和最后一个顶点外,其
余顶点不重复出现的回路。
11
6.1 图的基本概念
V0V1V3V2
V0V1V3V0V1V2

数据结构_第六章_图_练习题与答案详细解析(精华版)

数据结构_第六章_图_练习题与答案详细解析(精华版)

图1. 填空题⑴ 设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。

【解答】0,n(n-1)/2,0,n(n-1)【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。

⑵ 任何连通图的连通分量只有一个,即是()。

【解答】其自身⑶ 图的存储结构主要有两种,分别是()和()。

【解答】邻接矩阵,邻接表【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。

⑷ 已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。

【解答】O(n+e)【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。

⑸ 已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。

【解答】求第j列的所有元素之和⑹ 有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。

【解答】出度⑺ 图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。

【解答】前序,栈,层序,队列⑻ 对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。

【解答】O(n2),O(elog2e)【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。

⑼ 如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。

【解答】回路⑽ 在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。

【解答】vi, vj, vk【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。

数据结构 第六章 树和二叉树

数据结构 第六章  树和二叉树

F
G
H
M
I
J
结点F,G为堂兄弟 结点A是结点F,G的祖先
5
树的基本操作
树的应用很广,应用不同基本操作也不同。下面列举了树的一些基本操作: 1)InitTree(&T); 2)DestroyTree(&T); 3)CreateTree(&T, definition); 4)ClearTree(&T); 5)TreeEmpty(T); 6)TreeDepth(T); 7) Root(T); 8) Value(T, &cur_e); 9) Assign(T, cur_e, value); 10)Paret(T, cur_e); 11)LeftChild(T, cur_e); 12)RightSibling(T, cur_e); 13)InsertChild(&T, &p, i, c); 14)DeleteChild(&T,&p, i); 15)TraverseTree(T, Visit( ));
1
2 4 8 9 10 5 11 12 6 13 14 3 7 15 4 6 2
1
3
5 7
证明:设二叉树中度为1的结点个数为n1 根据二叉树的定义可知,该二叉树的结点数n=n0+n1+n2
又因为在二叉树中,度为0的结点没有孩子,度为1的结点有1 个孩子,度为2的结点有2个结孩子,故该二叉树的孩子结点 数为 n0*0+n1*1+n2*2(分支数) 而一棵二叉树中,除根结点外所有都为孩子结点,故该二叉 树的结点数应为孩子结点数加1即:n=n0*0+n1*1+n2*2+1
文件夹1
文件夹n

第6章 图4-算法与数据结构(第三版)-陈媛-清华大学出版社

第6章 图4-算法与数据结构(第三版)-陈媛-清华大学出版社
基本思想: 假设求从顶点vi到v j的最短路径,如果从vi到vj 有弧,初则始从化vi时到vSj=存{}在,一于条是长a[度i,为j]c=ocsots[ti,[i,j]的j]接路着进 径 行n次试探,依次向集合S中加入v1,v2,...vn 用二维。数每组次A加的入元一素个a[顶i,点j]。存放从vi到vj中间只经 过集合首S先中S的=S顶∪点{v的1}所,有考可虑能路的径路(v径i,中v1,,有v最j)是短否存 长度的在路,径即的判长别度弧。(vi,v 1)和(v1,vj)是否存在,如
计算机科学与工程学院《数据结构》课程组
6
Dijkstra算法
S←{v1}; dist[j]←cost[1,j] j=2,...,n; 选择vj使得 dist[j]=min{dist[i]│vi∈V-S} vj就是当前求得的一条从v1出发的最短路径的终 点。令:S=S∪{j} 修改从v1出发到集合V-S上任一个顶点Vk可达的 最短路径长度,如果dist[j]+cost[j,k]<dist[k], 则修改dist[k]为dist[k]=dist[j]+cost[j,k] 重复(2)、(3)共n-1次,由此求得从v到图上其余各 顶点的最短路径是依路径长度递增的序列 时间复杂度为O(n2)
20
计算机科学与工程学院《数据结构》课程组
3
单源最短路径-迪杰斯特拉(Dijkstra)算法思想
按路径长度递增次序产生最短路径算法: 把V分成两组:
S:已求出最短路径的顶点的集合 V-S=T:尚未确定最短路径的顶点集合 将T中顶点按最短路径递增的次序加入到S中, 保证: 从源点V0到S中各顶点的最短路径长度都不大于 从V0到T中任何顶点的最短路径长度 每个顶点对应一个距离值
计算机科学与工程学院《数据结构》课程组

王道数据结构 第六章 图思维导图

王道数据结构 第六章 图思维导图

ve(源点)=0
ve(k)
=
Ma
x{ve(j)+Weight(vj
v, k ​ ​)},vj
v 为 ​
k
的任意前驱

1.求所有事件的最早发生时间ve()
按逆拓扑排序序列,依次求各个顶点的vl(k):
vl(汇点)=ve(汇点)
vl(k)
=
Min{vl(j)-W
eight(vj
v, k ​ ​)},vj
常见考点:
对于n个顶点的无向图G,
若G是连通图,则最少有n
-1条边,
若G是非连通图,则最多可能有Cn2−
1
条边

对于n个顶点的有向图G,
若G是强连通图,则最少有
n条边
子图/生成子图(子图包括所有顶点)
强连通分量:有向图中的极大强连通子图(必须强连通且保留尽可能多的边)
连通图的生成树是包含图中全部顶点的一个极小连通子图(边尽可能的少但要保 持连通)
n个顶点对应2Cn2
条边

几种特殊的图
稀疏图/稠密图 树:不存在回路,且连通的无向图
n个顶点的树必有n-1条边 常见考点:n个顶点的图,若|E|>n-1,则图中一定存在回路
有向树:一个顶点的入度为0,其余顶点的入度均为1的有向图
有向树不是强连通图
常见考点
邻接矩阵
图的存储
无向图
第i个结点的度 = 第i行(或第i列)的非零元素个数
每一轮时间复杂度:O(2n)
时间复杂度
最短路径问题
Dijkstra算法不适用于有负权值的带权图 算法思想:动态规划
Floyd算法(带权图,无权图)
各顶点间的最短路径

第6章 图3-算法与数据结构(第三版)-陈媛-清华大学出版社

第6章 图3-算法与数据结构(第三版)-陈媛-清华大学出版社
权 14 2 6 5
12
PRIM算法
✓ 初始为任意一个顶点,置初始候选蓝边集 ✓ While(T中顶点数目<n) ✓{
✓ 从候选蓝边集合中选取最短蓝边(u,v); ✓ 将边(u,v)及结点涂成红色,扩充到T中; ✓ 调整候选蓝边集; ✓}
13
PRIM算法数据结构
✓ int dist[n][n]; //网络的邻接矩阵
✓ typedef struct ✓{
✓ int from,end; //边的起点和终点 ✓ int length; //边的权值 ✓ }edge; //边结构
✓ edge T[n-1]; //图的生成树
14
15
最小生成树——克鲁斯卡尔(Kruskal)算法
✓ 算法 ✓ 设连通网N={V,E}, ✓ 令最小生成树的初始状态为 ✓ 有n个顶点,无边的非连通图T=(V,Φ) ✓ 图中每一个顶点自成一个连通分量 ✓ 在E中选择权最小的边 ✓ 若此边依附的顶点落在T的不同的连通分量上,则将此边加入 到T中 ✓ 该边的加入将使两个连通分量合成一个连通分量 ✓ 否则该边的加入必然出现回路,所以舍去此边,选择下一条 代价最小的边 ✓ 依此类推,直到T 中所有顶点在同一连通分量上
✓ n个城市间建立通信网,只需n-1条线路 ✓ 如何在可能的线路中选择n-1条边,把所有城
市连起来,且总耗费(各边权值之和)最小 ✓ 找图中的最小生成树
8
PRIM算法
✓ 贪心法 ✓ 旅行推销员(TSP)问题
✓ 推销员从其中某一城市出发,唯一走遍n个城市, 再回到出发的城市,求最短的路线
✓ 在带权无向完全图中,访问每个顶点恰好一次、并且返 回出发点、总权数最小的回路
(d)
17
练习题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1
有错误!
2
v exs
3 4
5
6
二、邻接表 (Adjacency List)
类似于树的孩子链表示法。
方法:把同一个顶点发出的边链接在同一个边链表中, 链表的每一个结点代表一条边,叫做边结点,结点中 保存有与该边相关联的另一顶点的顶点下标 dest 和指 向同一链表中下一个边结点的指针 link。另外,每个 链表设一表头结点:存放顶点的值和指向第一个结点 的指针。并将所有表头结点存放在数组中。
无向图的邻接矩阵是对称的,有向图的邻接矩阵 可能是不对称的。
▪ 在有向图中, 统计第 i 行 1 的个数可得顶点 i 的出度, 统计第 j 列 1 的个数可得顶点 j 的入度。
▪ 在无向图中, 统计第 i 行 (列) 1 的个数可得顶点i 的度。
网络的邻接矩阵
W (i, j), 如果 i ! j 且 < i, j E 或 (i, j) E
1、无向图的邻接表
▪图的连通 在无向图G中,若两个顶点vi和vj之间有 路径存在,则称vi 和vj 是连通的。若G中任意两 个顶点都是连通的,则称G为连通图。无向图中的 极大连通子图叫做连通分量。
强连通图与强连通分量 在有向图中, 若对于每一 对顶点vi和vj, 都存在一条从vi到vj和从vj到vi的路径, 则称此图是强连通图。有向图中的极大强连通子图 叫做强连通分量。
一、图定义
图G是由两个集合V,E组成,记作:G=( V, E ) , 其中:V = { x | x 某个数据对象} ,是顶点的非空有 限集合;E = {(x, y) | x, y V } ,是顶点之间关系的 有限集合,也叫做边(edge)集合。
分为:有向图与无向图
若图G中的每条边都是有方向的,则称G为有向图。有 向边也称为弧,是顶点的有序对,记:<v,w> v,w∈V,表示:v→w.称v为始点,w为终点。
▪路径 在图G=(V,E) 中, 若存在一个顶点序列
vp1, vp2, …, vpm,使得(vi,vp1)、(vp1,vp2)、 ...、(vpm, vj)均属于E,则称顶点vi到vj存在一 条路径 。若一条路径上除了vi 和vj 可以相同外, 其余顶点均
不相同,则称此路径为一条简单路径。起点和终点相 同的路径称为简单回路或简单环。
顶点数n 与边数关系:
边数
n 1, = n -1, > n -1.
非连通图
最小连通图,树或表 非连通图
具有回路的图, 当达到最大边数时, 为完全图
✓ 图的基本概念 ✓ 图的存储结构 ✓ 图的遍历 ✓ 生成树和最小生成树 ✓ 最短路径 ✓ 拓扑排序
6.1 图的基本概念
图是一种复杂的非线性结构。图中结点之间的关系是任 意的,即任意两个结点之间都可能有关系(“多对多” 关系)。
一、邻接矩阵 (Adjacency)
用两个数组存储,一个记录各个顶点信息的顶 点表,还有一个表示各个顶点之间相邻关系的 二维数组,称邻接矩阵。
设图 A = (V, E)是一个有 n 个顶点的图,则图 的邻接矩阵是一个二维数组A .Edge[n][n],定 义:
A.Edge
[i
][
j]
1, 0,
如果 < i, j > E 或者 (i, j) E 否则
图的邻接表描述:
/*边表结点定义*/ typedef struct node { int adjvex; struct node *next; } edgenode;
/*顶点表结点*/ typedef struct { vextype vertex; edgenode *firstedge; } vexnode; vexnode ga[MaxVexNum];
路径长度:路径上边的数目。
完全图 对有n个顶点的图,若为无向图且边数为 n(n-1)/2,则称其为无向完全图;若为有向图且边数 为n(n-1) ,则称其为有向完全图。
子图 设有两个图 G=(V, E) 和 G′=(V ′, E′ )。若
V′ V 且 E ′ E, 则称 图G ′ 是 图G 的子图。
▪权 某些图的边具有与它相关的数, 称之为权。这种
带权图叫做网络。
▪权 某些图的边具有与它相关的数, 称之为权。这种
带权图叫做网络。
7
10 2
5 9
1
12
63
8
15
76
6
3
4
16
7
60
A
B 40 80 C
30
75
35
D
E
45
三、图的基本操作
建立图;图的遍历;插入新顶点;删除图中顶点; 查找;等。
6.2 图的存储结构
若图G中的每条边都是没有方向的,则称G为无向图。 边是顶点的无序对。记(v,w) v,w∈V,表示v-w.
二、术语
▪ 邻接顶点 若(u,v)是一条无向边,则称顶点u和v 互为邻接点,或称u和v相邻接。对于有向边<u,v>, 称顶点u邻接到顶点v,顶点v邻接自顶点u。
▪顶点的度 一个顶点v的度是与它相关联的边的条数。 对有向图有出、入度之分。顶点 v 的入度 是以 v 为终 点的有向边的条数; 顶点 v 的出度是以 v 为始点的有向 边的条数。顶点 v 的度等于其出、入度之和。
1 0 1 0 0
1 vexs 32
4 5
B
A
D
C
E
0 1 1 1 1
arcs 00
0 0
0 0
0 0
10
0 1 0 0 0
0 0 0 0 0
A
v
exs
CB
D
E
2
20
1
40
5
70
4
30
50
3
80
6
20 30
20
40
arcs
30
40
50
50
70
80
70 80
A.Edge
[i][
j]
=
,
否则,但是 i != j
0, 对角线 i == j
邻接矩阵表示法中图的描述
#define MaxVexNum 100 /*图的顶点数*/
typedef char vextype; /*顶点的数据类型*/
typedef float adjtype; /*权值类型*/
仅为顶点数据映像
tHale Waihona Puke pedef struct而不包含关系映像
{ vextype vexs[MaxVexNum]; /*顶点表*/
adjtype arcs[MaxVexNum][MaxVexNum]; /*边表*/
} MGraph;
2
1
4
3
5
0 1 1 1 1
arcs 11
0 0
0 0
1 0
10
1 1 0 0 0
相关文档
最新文档