图 Graph

关键词:图、邻接矩阵、邻接表、广度优先搜索、最短路径、深度优先搜索、拓扑排序、最小生成树、单源最短路径、Dijkstra算法、

图的表示

图的两种表示方法:邻接矩阵表示和邻接表表示。

图 Graph_第1张图片

图的广度优先搜索

可处理无向图或有向图

从起始顶点s出发的广度优先搜索(遍历所有顶点,只需要对每个顶点调用一次该函数):将顶点分成3类:

1 未遍历到的白色;

2 第一次被遍历到的灰色;

3 从一个灰色顶点v的外围找白色顶点,找到的都设置为灰色,此时这个v遍历完成,遍历完成设置成黑色;

4 起始点s加入队列Q,灰色顶点都要加入Q,只要Q不空就继续;

图 Graph_第2张图片

广度优先遍历结果

1 广度优先搜索遍历到过程会生成一颗根节点为s的树。

2 树上的每个顶点都有一个距离,表示这个顶点离起始顶点的边的个数。

3 广度优先搜索的结果就是单源最短路径(即,路径长度为经过的边的个数,边的权均为1)。

图的深度优先搜索

深度优先搜索是一个递归函数,总是优先对第一次遍历到底灰色顶点接着去遍历灰色顶点的邻接白色顶点。

可处理无向图或有向图

图 Graph_第3张图片

图 Graph_第4张图片

图 Graph_第5张图片

深度优先搜索的结果

1 深度优先搜索的结果按照父子节点得到拓扑排序(无回路图)

图 Graph_第6张图片

最小生成树

贪心算法

有n个元器件,用n-1个导线将他们连起来(无向图)。

Prim算法,从一个顶点开始加入已经遍历的集合,每次从连接已经遍历集合和未遍历集合的边里面选长度最短的那条边加入即可。

图 Graph_第7张图片

图 Graph_第8张图片

单源最短路径

有向无环图,边上的权非负

Dijkstra算法(贪心算法)

每次选一个距离最近的顶点进来,用这个最近的顶点的边,更新外围可达顶点到源点的距离。

图 Graph_第9张图片

图 Graph_第10张图片

图 Graph_第11张图片

你可能感兴趣的:(C++数据结构与算法实现,算法,数据结构,排序算法,开发语言,c++)