目录
一、初识图结构
1.什么是图
图是一种与树有些相似的数据结构,实际上,在数学的概念上,树是图的一种。
树可以用来模拟很多现实的数据结构,比如: 家谱、公司组织架构等等。同时,可以使用地铁地图来模拟图:
上面的结点(其实图中叫顶点Vertex)之间的关系,是不能使用树来表示(几叉树都不可以),这个时候,就可以使用图来模拟它们。
2.图的特点
一组顶点:通常用 V (Vertex) 表示顶点的集合
一组边:通常用 E (Edge) 表示边的集合
边是顶点和顶点之间的连线
边可以是有向的,也可以是无向的。(比如A --- B,通常表示无向。 A --> B,通常表示有向)
3.图的术语
下图是一个抽象出来的图:
(1).顶点
顶点表示图中的一个结点。
比如地铁站中某个站、多个村庄中的某个村庄、互联网中的某台主机、人际关系中的人。
(2).边
边表示顶点和顶点之间的连线。
比如地铁站中两个站点之间的直接连线,就是一个边。
注意: 这里的边不要叫做路径,路径有其他的概念
在上面的图中: 0 - 1有一条边, 1 - 2有一条边, 0 - 2没有边.
(3).相邻顶点
由一条边连接在一起的顶点称为相邻顶点。
比如0 - 1是相邻的, 0 - 3是相邻的. 0 - 2是不相邻的
(4).度
一个顶点的度是相邻顶点的数量。
比如0顶点和其他两个顶点相连, 0顶点的度是2
比如1顶点和其他四个顶点相连, 1顶点的度是4
(5).路径
路径是顶点v1, v2..., vn的一个连续序列,比如上图中0 1 5 9就是一条路径.
1.简单路径: 简单路径要求不包含重复的顶点. 比如 0 1 5 9是一条简单路径.
2.回路: 第一个顶点和最后一个顶点相同的路径称为回路. 比如 0 1 5 6 3 0
(6).无向图
上面的图就是一张无向图,因为所有的边都没有方向。
比如 0 - 1之间有变, 那么说明这条边可以保证 0 -> 1, 也可以保证 1 -> 0.
(7).有向图
有向图表示的图中的边是有方向的。
比如 0 -> 1, 不能保证一定可以 1 -> 0, 要根据方向来定.
(8).无权图和带权图
1.无权图
上面的图就是一张无权图(边没有携带权重)
我们上面的图中的边是没有任何意义的, 不能收 0 - 1的边, 比4 - 9的边更远或者用的时间更长.
2.带权图
带权图表示边有一定的权重。
这里的权重可以是任意希望表示的数据,比如距离或者花费的时间或者票价.
下图是一张有向和带权的图:
二. 图的表示
一个图包含很多顶点,另外包含顶点和顶点之间的连线(边),这两个都是非常重要的图信息。
1.顶点表示
顶点的表示相对简单,上面的顶点抽象成了1 2 3 4, 也可以抽象成A B C D。这些A B C D可以使用一个数组来存储起来(存储所有的顶点)。当然, A, B, C, D有可能还表示其他含义的数据(比如地铁站的名字),这个时候,可以另外创建一个数组,