图基础理论篇

168 阅读2分钟

我们平常所用到的树是一种特殊的无环连通图。

树一定是图,但是图不一定是树。

树是一种存储数据结构。通过用顶点/节点 来存储价值/数值。

而图是一种表示型数据结构,它有两部分组成:顶点和边。 比如在下图,顶点表示城市,而边表示两个城市之间的某种关系,我们称之为权值,权值可能是:亲密度,距离,高铁时间,高铁价格等。 image.png

图分为无向图和无向图,无向图是指a可以到b,b也可以到a。有向图指的是只能单向传递的图,比如只能a到b,但是不能通过b到达a:

image.png

图的存储结构

图一般有邻接矩阵邻接表两种存储方式。

邻接矩阵一般存稠密图(每两个顶点都有一条边相连的图): 如下图,A存储的是,B也存储的是1,说明A与B相通且无向: image.png

如果是无向图,邻接矩阵的表示如下: 比如顶点0指向1的边存储的是1,而顶点1指向0的边存储的是0,说明顶点0可以到达顶点1,顶点1不不能直接到达顶点0:

image.png

邻接表一般存储稀疏图(只有一个顶点有到达各个顶点的一条边):

image.png

我们模拟实现一下邻接矩阵

邻接矩阵

结构 image.png

图的创建

一般有三种:

一.IO,但是这种不方便修改,适合用于OJ中

二.根据图的结构特征适合写入到文件中,但是不方便修改。

三.手动写边,像下面这种:

我们想要测试直接改数据就行了 image.png

我们就按第三种来写:

主要函数

初始化

image.png

添加边

image.png

在添加边之前我们需要获取一下顶点,顶点我们在map里面存着,我们可以通过获取顶点下标的方式获取顶点:

image.png

image.png

打印

image.png

代码托管:图--邻接矩阵 ·