数据结构预算法(C语言)之图

1.前言

线性表 每个元素只有一个直接前驱和一个直接后继 一对一的关系

树形结构 数据元素之间是层次关系 一对多的关系

2.图的定义:

1)图(Graph)是由顶点的有穷非空集合顶点之间边的结合组成

表示方式:G(V,E)其中G表示一个图,V是G中顶点的集合,E是图G中边的集合。

注意:

线性表中我们把数据元素叫元素中叫做结点;中数据元素我们叫做顶点(Vertex)

线性表可以没有数据元素,成为空表中可以没有结点,叫做空树;而图结构在强调顶点集合V要有穷非空

线性表相邻元素是线性关系树结构中,相邻两层的结点具有层次关系,而图结构中任意两顶点之间都可能有关系,顶点之间的逻辑关系用边来表示,边集可以为空

2)无向边:若顶点Vi到Vj之间的边没有方向,则称为这条边为无向边(Edge),用无序偶(Vi,Vj)来表示

数据结构预算法(C语言)之图_第1张图片

上图G1是一个无向图,G1=(V1,E1)其中

V1={A,B,C,D}

E1={(A,B),(B,C),(C,D),(D,A),(A,C)}

3)有向边:若从顶点Vi到Vj的边有方向,则称这条边为有向边,也称为弧(Arc),用有序偶<Vi,Vj>来表示,Vi称为弧尾,Vj称为弧头

数据结构预算法(C语言)之图_第2张图片

上图G2是一个无向边,G2=(V2,E2)其中

V2={A,B,C,D}

E2={<B,A>,<B,C>,<C,A>,<A,D>}

4)简单图:在图结构中,若不存在顶点到其自身的边,且同一条边不重复出现,则这样的图为简单图

以下两个不属于简单图:

数据结构预算法(C语言)之图_第3张图片

5)无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称为无向完全图。含n个顶点的无向完全图有n*(n-1)/2条边

数据结构预算法(C语言)之图_第4张图片

6)有向完全图:在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧,则称为有向完全图。含n个顶点的有向完全图有n*(n-1)条边

数据结构预算法(C语言)之图_第5张图片

7)稀疏图和稠密图:这里的稀疏和稠密是模糊的概念,都是相对而言的,通常认为边或弧数小于n*logn(n是顶点的个数)的图称为稀疏图,反之称为稠密图

数据结构预算法(C语言)之图_第6张图片

上图中,图中的边或弧所带的与它相关的数字,称这种与图的边或弧相关的数叫做权(Weight),带权的图通常称为网(network)

3.图中的关系

1)假设两图G1=(V1,E3)和G2=(V2,E2),如果V2属于V1,E2属于E1,则称G2 为G1的子图(subgraph)

2)对于无向图G=(V,E),如果边(V1,V2)属于E,则称顶点V1和V2互为邻接点,即V1和V2相邻接。边(V1,V2)依附于顶点V1和V2,或者说边(V1,V2)与顶点

V1和V2相关联。

顶点V的度是和V相关联的边的数目,记为TD(V)入下图,顶点A与B互为邻接点,边(A,B)依附于顶点A与B上,顶点A的度为3

数据结构预算法(C语言)之图_第7张图片

3)对于有向图G=(V,E),如果<V1,V2>属于E,则称顶点V1邻接到顶点V2,顶点V2邻接自顶点V1.

以顶点V为头的弧的数目称为V的入度,记为ID(V),以V为尾的弧的数目称为V的出度记为OD(V),因此顶点V的度为TD(V)=ID(V)+OD(V)

下图顶点A的入度为2,出度为1,所以顶点A的度为3

数据结构预算法(C语言)之图_第8张图片



4)顶点与边的关系

无向图G=(V,E)中从顶点V1到顶点V2的路径下图中用红线列举了从顶点B 到顶点D的四种不同路径:

数据结构预算法(C语言)之图_第9张图片

如果G是有向图,则路径也是有向的

下图用红线列举顶点B到顶点D的两种路径,而顶点A到顶点B就不存在路径啦:

数据结构预算法(C语言)之图_第10张图片

路径的长度是路径上的边或弧的数目。

第一个顶点到最后一个顶点相同的路径称为回路或环路。

序列中顶点不重复楚翔的路径称为简单路径,除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路,称为简单回路或简单环。下图左侧是检点环,右侧则不是。

数据结构预算法(C语言)之图_第11张图片

4.连通图

在无向图G中,如果从顶点V1 到顶点V2有路径,则称为V1 和V2是连通的,如果对于图中任意两个顶点Vi和Vj都是连通的,则称G是连通图

下图左侧不是连通图,右侧是连通图

数据结构预算法(C语言)之图_第12张图片

无向图中的极大连接子图称为连通分量。

注意:

首先要是子图,并且子图是要连通的;

连通子图含有极大顶点数;

具有极大顶点数的连通子图包含依附于这些顶点的所有边

数据结构预算法(C语言)之图_第13张图片

有向图G中,如果对于每一对Vi到Vj都存在路径,则称G是强连通图。

有向图中的极大强连通子图称为有向图的强连通分量。

下图左侧并不是强连通图,右侧是。并且右侧是左侧的极大强连通子图,也是左侧的强连通分量。

数据结构预算法(C语言)之图_第14张图片

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

数据结构预算法(C语言)之图_第15张图片

如果一个有向图恰有一个顶点入度为0,其余顶点的入度为1,则是一棵树。

数据结构预算法(C语言)之图_第16张图片


你可能感兴趣的:(数据结构,算法,C语言)