1. BFS算法
2. Dijkstra算法
3. Floyd算法
最短路径问题:
(1)单源最短路径问题:BFS算法(无权图)、Dijkstra算法(带权图、无权图)
(2)每对顶点间的最短路径: Floyd算法( 带权 图、无权图)
1. BFS算法:求⽆权图的单源最短路径
(1)⽆权图可以视为⼀种特殊的带权图,只是每条边的权值都为1
(2)代码实现
//求顶点u到其他顶点的最短路径
void BFS_MIN_Distance(Graph G,int u){
//d[i]表示从u结点到i结点的最短路径
for(i=0;i<G.vexnum;++i){
d[i]=inf; //初始化路径无穷大
path[i]=-1; //最短路径从哪个顶点来
}
d[u]=0;
visited[u]=TRUE;
Enqueue(Q,u);
while(!isEmpty(Q)){ //BFS算法主过程
DeQueue(Q,u); //队头元素出队
for(w=FirstNeighbor(G,u);w>=0;w=NextNeighbor(G,u,w))
if(!visited[w]){ //w是u未访问过的邻接顶
d[w]=d[u]+1; //路径长度+1
path[w]=u; //最短路径从顶点u到w
visited[w]=TRUE