无向图
有向图
有向图的实现
矩阵
使用矩阵去存储有向图时,其优点在与,访问两点直接是否有连线,以及连线方向如何是非常容易的,但其空间复杂度会非常大。为什么非常大呢,我们可能看一下矩阵是如何实现有图的:
首先,我们需要去开一个二维数组,二维数组开多大,取决于我们到底有多少个点,比如我们总共有n个点,则我们需要开一个 a[ n ][ n ] 的数组,这里是假设我们下标从0开始;如果下标从1开始的话,我们则需要开一个 a[ n+1 ][ n+1 ] 的数组
然后我们去确定这个数组里的每个元素,其确定方式是这样的:如果点i连向点j则 a[ i ][ j ]=1,否则 a[ i ][ j ]=0;如果点 j 连向点 i 则 a[ j ][ i ]=1,否则 a[ j ][ i ]=0。对于所以的点直接的关系我们都这样去存,则这时候我们就实现了有向图的存储
链表
使用链表来存储有向图的话,我们的空间复杂度相比于矩阵就会小很多
图的遍历
深度优先搜索(DFS)
广度优先搜索(BFS)