广度优先搜索(BFS)算法类似于树中的层次搜索:
从任意点s出发,先遍历与s相邻的点,然后再遍历于相邻的点相邻的点。注意有向图必须是顺方向的邻接点。
为什么说广度优先搜索可以用来求无权最短路径呢?因为,广度优先搜索每次都会先发现距离s为k的所有顶点,然后才会 发现距离s为k+1的所有顶点。 s为起始点。
void BFS(Graph& g, Vertex& s)
{
queue<vertex> q;
for each vertex v in g
{
v.distance = INFINITY;
}
s.distance = 0;
q.enqueue(s);
while (!q.Empty())
{
v = dequeue(q);
for each w adjenct to v
if (v.distance == INFINITY)
{
w.distance = v. distance + 1;
w.path = v;
q.enqueue(w);
}
}
}
对于外面的while循环,会执行|V|次,因为每个顶点入队出队一次,而里面的for循环会看到一共会执行|E|次,即变长, 所以该算法时间复杂度为O(|V|+|E|)。
打印最短路径:
void PrintPath(Graph& g, V