最短路径问题–BFS算法
一、单源最短路径问题
1.BFS算法(无权图)
代码实现
//求顶点u到其他顶点的最短路径
void BFS_MIN_Distance(Graph G, int u){
//d[i]表示从u到i结点的最短路径
for(int i=0; i<G.vexnum; i++){
d[i] = MAX; //初始化路径长度
path[i] = -1; //最短路径从哪个顶点过来
}
d[u] = 0;
visited[u] = true;
enQueue(Q, u);
while(!isEmpty(Q)){ //BFS算法主过程
deQueue(Q, u); //队头元素u出队
for(w=firstNeighbor(G,v); w>=0; w=nextNeighbor(G,v,w)){
if(!visited[w]){ //w为u的尚未访问的邻接顶点
d[w] = d[u] + 1; //路径长度加1
path[w] = u; //最短路径应从u到w
visited[w] = true; //设已访问标志
enQueue(Q, w); //顶点w入队
}//if
}//for
}//while
}
就是对BFS的小修改,在visit一个顶点时,修改其最短路径长度d[]并在path[]记录前驱结点