王锐龙

导航

第六章学习小结

前两周学习了图。这章的接触到了一个全新的知识体系。感觉图比线性表和树都要复杂。下面是对本章的总结。

一、关于图的定义和术语

1.图一般可记为G=(V,E),其中V是顶点的集合,E是边。图还可分为有向图与无向图。

2.个人认为常用的图的术语。

1)度:定点v的度是指和v相关联的边的数目。顶点的度可分为入度和出度。

2)连通分量是指无向图中的极大连通子图

3)连通图的生成树是指一个极小连通图,它含有图中全部顶点,但只有足以构成一棵树的n-1条边。

二、图的邻接矩阵表示法

#define MaxInt 32767
#define MVNum 100
typedef struct{
char vexs[MVNum];//顶点表
int arcs[MVNum][MVNum];//邻接矩阵
int vexnum,arcnum;//图的当前点数和边数
}AMGraph;

以上是书本中给的定义。

采用邻接矩阵表示法创建无向网,时间复杂度是O(n2

优点:

1)便于判断两个顶点是否有边(根据vi[]数组的true 或false来判断)

2)便于计算各顶点的度

缺点:

1)不便于增加删除顶点

2)不便于统计边的数目

3)空间复杂度高,为O(n2

三、图的邻接表表示法

#define MVNum 100
typedef struct ArcNode//边结点
{
int adjvex;//该边所指向的顶点的位置
struct ArcNode *nextarc;//指向下一条边的指针
int info;//和边相关的信息
}ArcNode;
typedef struct VNode//顶点信息
{
char data;
ArcNode *firstarc;//指向第一条依附该顶点的边的指针
}VNode,AdjList[MVNum];//邻接表
typedef struct
{
AdjList vertices;
int vexnum,arcnum;//图当前的顶点数和边数
}ALGraph;

以上是书本的代码段。

采用邻接表表示法创建无向网,时间复杂度是O(n+e)

优点:

1)便于增删顶点

2)便于统计边的数目

3)空间效率高

缺点:

1)不便判断是否有边

2)不便计算有向各顶点的度

四、深度优先搜索(DFS)

从图中某个顶点发v 出发,访问此顶点,然后依次从v 的未被访问的邻接点出发深度优先遍历图,直至图中所有和v 有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。

五、广度优先搜索(BFS)

从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使得“先被访问的顶点的邻接点先于后被访问的顶点的邻接点被访问,直至图中所有已被访问的顶点的邻接点都被访问到。如果此时图中尚有顶点未被访问,则需要另选一个未曾被访问过的顶点作为新的起始点,重复上述过程,直至图中所有顶点都被访问到为止。

由于题目还有些没打完,所以这周先做知识梳理。下周希望自己能独立完成实践题。

posted on 2019-05-19 21:56  王锐龙  阅读(284)  评论(0编辑  收藏  举报