prim算法与dijkstra算法在更新上的区别

prime:

 visit[index] = true;//最短边对应的另一个点纳入集合
        cout << index << " ";
        sum += minor;//最小树的总距离长度
        for (int j = 0; j < N; j++){
            if (!visit[j] && dist[j]>g[index][j]){//更新当前包括之前可连的点(最短),当前这个点a与其他点b的距离可能比之前的其他点c与点b的距离要短,所以要更新。
                dist[j] = g[index][j];
            }
        }

dijkstra:

s[u] = true;
        for (int j = 1; j <= n; j++) {//从最小边的点更新之前的与v0的距离
            if (!s[j] && dist[u] + map[u][j] < dist[j]) {
                dist[j] = dist[u] + map[u][j];
                pre[j] = u;//如果有更小边,则说明j的前驱为u
            }
        }

我也是刚开始学这个东西,看了之后发现两个算法简直就是一模一样,prim算法是用来算最小生成树的,就是求最小的连通值,而dijkstra算法是用来做单源最小路径的。差别也就在这个更新数组的位置,prim更新的是所有已加入集合的点到未加入点的最小距离,为后续继续纳入点。
而dijkstra的更新是指的初始点到所有点的最小距离,自然也就需要原点到这个点的距离+这个点到目标点的距离,来直接和原点到目标点的距离进行判定。然后更新最短距离。综上,我所理解的更新的区别就这么多,我的解释只是非常浅显的,若要深入的理解还需要认真的学习算法的证明和推导过程才行。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36459536/article/details/79950237
个人分类: 数据结构
上一篇最短路径dijkstra算法与Floyd算法
下一篇排序第一篇--简单排序之冒泡与插入
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭