用一个队列来存储要遍历的顶点。在迭代开始的时候,队列只含有距离为currDist的顶点,当添加距离为currDist的邻接点时,由于它们自队尾入队,因此这就保证它们直到所有距离为currDist的顶点都被处理之后才被处理。在距离为currDist处的最后一个顶点出队并被处理后,队列只含有距离为currDist+1的顶点,因此该过程将不断进行下去。只需要把开始的结点放入队列中以启动这个过程即可。
无权最短路径算法的伪代码
void Graph::unweighted( Vertex s)
{
Queue<Vertex> q;
for each Vertex v
v.dist=INFINITY;
s.dist=0;
q.enqueue( s );
while( !q.isEmpty( ) )
{
Vertex v=q.dequeue();
for each Vertex w adjacent to v
if( w.dist == INFINITY )
{
w.dist = v.dist + 1;
w.path=v;
q.enqueue(w);
}
}
}