对于图这个数据结构来说,最重要的操作莫过于搜索,以不同的策略(中间值的存储方式)遍历图会得到不同的结果,但是我们可以将搜索过程抽象出来,得到一个通用框架。具体代码如下:
Whatever-FIrst Search
WhateverFirstSearch(s):
put s into the bag
while the bag is not empty
take v from the bag
if v is unmarked
mark v
for each edge vw
put w into the bag
这里具体实现的搜索策略是什么取决于采用什么样的bag。具体如下
-
bag为Stack:Depth-First
-
bag为Queue: Breadth-First
-
bag为Priority Queue:Best-First
- 如果是无向图而且使用边的权值作为其优先级,best-first会构建此图的最小生成树,此算法为prim算法。
- 如果我们将路径的长度定义为其边缘权重的总和。 我们还可以使用最佳搜索来计算加权图中的最短路径。每一个结点存储一个距离dist(v):代表s到v的距离。这个算法为Dijkstra算法
- 将路径的宽度定义为路径中任何边缘的最小权重。我们得到“Dijkstra”的最佳搜索算法的简单修改计算从s到每个其他可到达顶点的最宽路径;