• 数据结构之图(最短路径问题)


    最短路径

    问题描述

    两种
    单源最短路径问题和每队顶点的最短路径问题
    在这里插入图片描述
    对应图有不同的解法

    BFS算法

    求不带权图最短路径
    在这里插入图片描述
    原来的BFS算法
    在这里插入图片描述
    改进求最短路径的
    在这里插入图片描述
    就是多加d[]数组和path[]数组
    d[]数组来记录从顶点到对应节点路径长
    path[]数组记录每个对应节点的直接前驱节点
    比如3对应的就是6奥
    如果是按节点大小顺序入队的话
    4前驱节点应该是3
    如果不是的话可能是7
    看情况
    看先处理谁了
    在这里插入图片描述

    Dijkstra算法

    BFS算法的局限
    在这里插入图片描述
    不能算带权图最短路径

    算法
    在这里插入图片描述
    定义三个数组
    第一个数组代表是否找到到其最短路径
    第二个数组代表目前为止从初始顶点到对应顶点最短路径的长度
    第三个路径上的前驱
    第一轮
    在这里插入图片描述
    先遍历跟节点v0进行一个初始的dist[]和path[]的数据更新

    数据更新完以后,找对应dist[]最小且final[]不为false的节点Vi,再把final[i]=true
    (分析一波:为什么找到dist最小的直接等于true,首先从根节点只有两条路一个v1一个v4这里dist[4]是5比10小,路径长度肯定是相对于v0而言的,所以如果你从别的方式到达v4肯定要经过v1,那就肯定比v1直接到v4大,所以肯定v4的最短路径就出来了,但是v1就不确定,到v1你处理可以从v0直接到v1还可以经过v4(虽然后面不知道)但是是有可能比10小的,所以final[v4]就直接为true)
    再通过这个节点遍历其旁边final[]为false的节点进行dist[]和path[]的更新
    最后把要所有节点遍历一遍,final[]全是true

    dist[]如果找到比原数值小的数
    的话
    替换对应的dist[]和path[]
    注意奥dist和path[]是一起变的,没有说只有一个变
    在这里插入图片描述
    第二轮还是,找遍历dist数组找dist[]最小且final[]不为false的节点Vi,作为下一个节点
    且定义这个绩点为true(和前面的分析一样的奥,就是初始顶点变了,不过最后还是从v0到对应顶点的距离)
    然后遍历其旁边的边(节点)更新dist和path数组
    第三四五轮一样
    在这里插入图片描述
    算法完成后的数组
    在这里插入图片描述

    代码实现

    在这里插入图片描述
    在这里插入图片描述

    负权值失效

    在这里插入图片描述

    Floyd算法

    各点间的最短路径问题!
    原理
    在这里插入图片描述
    直接举例吧
    第一遍不允许有中转顶点的情况
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    就由最后一个推出来的矩阵就能确定
    某点到某点的最短路径喽
    通过path来判断路径
    对应的0 1 2代表v0 v1 v2做中转点
    在这里插入图片描述

    代码实现

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    练习
    在这里插入图片描述

    总结

    在这里插入图片描述

  • 相关阅读:
    Debezium系列之:查看每个Binlog事件的原始SQL语句
    【深度学习】【Opencv】Python/C++调用onnx模型【基础】
    基于STM32单片机一氧化碳(CO)气体监控系统proteus仿真设计
    【Linux】【minicom】usb转串口
    Gang Scheduling Performance Benefits for Fine-Grain Synchronization
    Codeforces Round 903 (Div. 3)
    深入了解Linux内核MMU管理机制
    cocos creator做圆形进度条
    C语言解决逻辑分析题(猜凶手)(猜名次)
    题目0120-九宫格按键输入
  • 原文地址:https://blog.csdn.net/y_k_j_c/article/details/127703714