其他分享
首页 > 其他分享> > 最短路(dijkstra、堆优化dijkstra、bellman-ford、spfa、floyd)

最短路(dijkstra、堆优化dijkstra、bellman-ford、spfa、floyd)

作者:互联网

一、朴素dijkstra算法(基于贪心)

      

//重复n-1次,每次在剩下的未确定最短路的点中,找距离源点最近的点,用这个距离来更新每个点到源点的距离
int dijkstra()
{
    memset(dist, 0x3f, sizeof dist);
    dist[1] = 0;

    for (int i = 0; i < n - 1; i ++ )  //n-1次
    {
        int t = -1;  //每次找到第一个未确定最短距离的点j,用j更新t,以这个t为基准,继续寻找比它距离源点更小的点
        for (int j = 1; j <= n; j ++ )
            if (!st[j] && (t == -1 || dist[t] > dist[j]))   //更新条件
                t = j;  //最终找到当前未确定最短路的点中距离源点最短的点

        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];
}

 

标签:dist,int,未确定,短路,源点,bellman,ford,dijkstra
来源: https://www.cnblogs.com/Mercury1988/p/16052998.html