存储

邻接矩阵

图最直观的一种存储方法就是,邻接矩阵(Adjacency Matrix)。

邻接矩阵的底层依赖一个二维数组。对于无向图来说,如果顶点 i 与顶点 j 之间有边,我们就将 A[i][j]和 A[j][i]标记为 1;对于有向图来说,如果顶点 i 到顶点 j 之间,有一条箭头从顶点 i 指向顶点 j 的边,那我们就将 A[i][j]标记为 1。同理,如果有一条箭头从顶点 j 指向顶点 i 的边,我们就将 A[j][i]标记为 1。对于带权图,数组中就存储相应的权重。

用邻接矩阵来表示一个图,虽然简单、直观( 基于数组,所以在获取两个顶点的关系时,就非常高效 ),且便于计算( 可以很方便的转换为矩阵运算 )。但是比较浪费存储空间。

邻接表

针对上面邻接矩阵比较浪费内存空间的问题,有另外一种图的存储方法,邻接表(Adjacency List)。

每个顶点对应一条链表,链表中存储的是与这个顶点相连接的其他顶点。

图中是一个有向图,每个顶点对应的链表里面,存储的是指向的顶点。

邻接表存储起来比较节省空间,但是使用起来就比较耗时间。

<aside> 💡 改进方法是可以根据实际需要,将链表改为数组、红黑数、跳表等更加高效的数据结构

</aside>