数据结构笔记chapter06_4_2_最短路径问题

本文介绍了最短路径问题,包括单源最短路径和每对顶点间的最短路径。重点讲解了BFS算法在无权图中的应用,Dijkstra算法的实现细节,以及Floyd算法的动态规划思想。Dijkstra不适用于负权图,而Floyd能处理负权值但不能有负权回路。
摘要由CSDN通过智能技术生成

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值