基础概念
G=(V, E)
如果无向图中从每一个顶点到其他每个顶点都存在一条路径,则称该无向图是连通的(connected)。具有这样性质的有向图称为是强连通的的(strongly connected)。如果有向图不是强连通的,但它的基础图(underlying graph)(也就是其弧上去掉方向说形成的图)是连通的,那么称该有向图是弱连通的(weakly connected)。完全图(complete graph)是其每一对顶点间都存在一条边的图。
存储表示方式
-
邻接矩阵
-
使用|V|*|V|的二维数组来表示图,g[i][j]=1表示定点i到顶点j右边,0则无。(对于无向图,二维矩阵是对称的,对角线都为0)
-
这种表示方法,查找两点间是否有边的复杂度为O(n^2),而且处理边数较少的图时效率不高(稀疏矩阵)
-
-
邻接表
-
邻接多重表(主要用于存储无向图)
对无向图而言,其邻接多重表和邻接表的差别,仅仅在于同一条边在邻接表中用两个结点表示,而在邻接多重表中只有一个结点。
遍历(搜索)(可用于判断无向图是否连通)(或用于求解连通图的最小生成树算法)
-
广度优先搜索
-
深度优先搜索
拓扑排序
最短路径算法
-
深度或广度优先搜索算法(解决单源最短路径)
-
Floyd算法
-
Dijkstra算法
-
Bellman-Ford算法(解决负权边,解决单源最短路径,前几种方法不能求含负权边的图)