数据结构--最短路径 Dijkstra算法

这篇具有很好参考价值的文章主要介绍了数据结构--最短路径 Dijkstra算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据结构–最短路径 Dijkstra算法

数据结构--最短路径 Dijkstra算法,408数据结构,算法,数据结构,图论,c++,c语言,Dijkstra,最短路

Dijkstra算法

计算  b e g i n  点到各个点的最短路 \color{red}计算\ begin\ 点到各个点的最短路 计算 begin 点到各个点的最短路

数据结构--最短路径 Dijkstra算法,408数据结构,算法,数据结构,图论,c++,c语言,Dijkstra,最短路

如果是无向图,可以先把无向图转化成有向图

数据结构--最短路径 Dijkstra算法,408数据结构,算法,数据结构,图论,c++,c语言,Dijkstra,最短路数据结构--最短路径 Dijkstra算法,408数据结构,算法,数据结构,图论,c++,c语言,Dijkstra,最短路

我们需要2个数组
final[] (标记各顶点是否已找到最短路径)与 dis[] (最短路径⻓度)数组

Dijkstra算法是一种用于寻找图中最短路径的算法,它的步骤如下:

  1. 初始化:将起始节点的最短路径设置为0,其他节点的最短路径设置为正无穷大。
  2. 选取最短路径最小的节点作为当前节点。
  3. 更新当前节点的邻居节点的最短路径:如果通过当前节点到达邻居节点的路径比邻居节点当前的最短路径更短,则更新邻居节点的最短路径。
  4. 标记当前节点为已访问(已经找到 b e g i n begin begin 到该点的最短路)。
  5. 重复步骤2 → \to 4,直到所有节点都被访问过或者没有可达到的节点。
  6. 根据最短路径和前驱节点构建最短路径树或者路径数组。

以上就是Dijkstra算法的基本步骤。在实际应用中,可以使用优先队列来选取最短路径最小的节点,以提高算法的效率 (堆Dijkstra)。

数据结构--最短路径 Dijkstra算法,408数据结构,算法,数据结构,图论,c++,c语言,Dijkstra,最短路

V0到V2 的最短(带权)路径⻓度为:dist[2] = 9
通过 path[ ] 可知,V0到V2 的最短(带权)路径:
v 0 → v 4 → v 1 → v 2 v_0 \to v_4 \to v_1 \to v_2 v0v4v1v2

Dijkstra算法的时间复杂度

时间复杂度: O ( n 2 ) 即 O ( ∣ V ∣ 2 ) O(n^2)即O(|V|^2) O(n2)O(V2)

代码实现

int g[N][N]; // 存储每条边
int dist[N]; // 存储1号点到每个点的最短距离
bool st[N]; // 存储每个点的最短路是否已经确定
//时间复杂是 O(n2+m), n 表示点数,m 表示边数
// 求1号点到n号点的最短路,如果不存在则返回-1
int dijkstra()
{
    memset(dist, 0x3f, sizeof dist);
    dist[1] = 0;
    for (int i = 0; i < n - 1; i++)
    {
        int t = -1; // 在还未确定最短路的点中,寻找距离最⼩的点
        for (int j = 1; j <= n; j++)
            if (!st[j] && (t == -1 || dist[t] > dist[j]))
                t = j;
        // ⽤t更新其他点的距离
        for (int j = 1; j <= n; j++)
            dist[j] = min(dist[j], dist[t] + g[t][j]);
        st[t] = true;
    }
    if (dist[n] == 0x3f3f3f3f)
        return -1;
    return dist[n];
}

负权值带权图问题,Dijkstra不可用

负权值带权图问题, D i j k s t r a 不可用!!! \color{red}负权值带权图问题,Dijkstra不可用!!! 负权值带权图问题,Dijkstra不可用!!!

数据结构--最短路径 Dijkstra算法,408数据结构,算法,数据结构,图论,c++,c语言,Dijkstra,最短路

事实上 V 0 V_0 V0 V 2 V_2 V2 的最短带权路径⻓度为 5
结论:Dijkstra 算法不适⽤于有负权值的带权图文章来源地址https://www.toymoban.com/news/detail-650534.html

到了这里,关于数据结构--最短路径 Dijkstra算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包