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的更新是指的初始点到所有点的最小距离,自然也就需要原点到这个点的距离+这个点到目标点的距离,来直接和原点到目标点的距离进行判定。然后更新最短距离。综上,我所理解的更新的区别就这么多,我的解释只是非常浅显的,若要深入的理解还需要认真的学习算法的证明和推导过程才行。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值