1、最短路径问题
单源多源、有权无权单源:固定起点,计算到其他每个顶点的最短路径,又分无权图 && 有权图
多源
2、无权图的单源最短路算法
1)思想:
路径长度为0的:起点
路径长度为1的:……
路径长度为2的:……
直到全部顶点都被访问到。
BFS遍历一次自然形成这个结果!
2)具体算法(类似BFS:访问入队-取元素如果子元素未访问,访问入队)第1个元素先访问再入队
此后,每从队列取元素,遍历邻接点,如果未访问,则先访问再入队
注意:出队的时候,出队元素已经访问过,所以要操作的是邻接点!
void UnWeighted(Vertex S){
dist[S] = 0;
Enqueue(Q, V);
while(!isEmpty(Q)):
{
Vertex V=DeQueue(Q);
for (V的每个邻接点W){
if (dist[V] == -1)
{
dist[W] = dist[V] + 1;
path[W] = V;#上一个节点
Enqueue(Q, W);
}
}
}
}
dist[W]和path[W] 分别记录距离和路径