zoukankan      html  css  js  c++  java
  • 单源最短路径算法

    单源最短路径问题:给定带权有向图G(V,E)和图中某点V0,求从V0到其他点的最短路径

    1.Dijsktra

    注意:不能用于图中有负权的情况,可否把所有边的权加上够大的值,使所有边的权为正,再计算?

    (1)令集合S={V0},T=V-S,初始化Dist[i],Dist[0]=0,Dist[i]=w(0,i)

    (2)循环直至S=V

      a.对T中的点,取Dist最小的点j,S=S+{j},T=T-{j}

      b.更新T中点的Dist

        for k in T

          if(Dist[k]>Dist[j]+w(j,k)) Dist[k]=Dist[j]+w(j,k)

    2.Bellman-Ford

    注意:可用于图中存在负权的情况,可检测图中是否存在负回路

    (1)初始化Dist[i],Dist[0]=0,Dist[i]=正无穷

    (2)循环n-1次,n为图中的点数

      bool updated = false

      for (i,j) in E    //遍历图中的每条边

        if(Dist[j]>Dist[i]+w(i,j))

          Dist[j]=Dist[i]+w(i,j)

          updated = true

      if(!updated)

        break

    (3)判断图中是否存在负回路

      for (i,j) in E

        if(Dist[j]>Dist[i]+w(i,j))

          return false    //存在负回路

    (4)return true    //不存在负回路

  • 相关阅读:
    设计模式复习-单例模式
    设计模式复习-组合模式
    设计模式复习-迭代器模式
    设计模式复习-备忘录模式
    PAT 1085 PAT单位排行 (Microsoft_zzt)
    PAT L1-034 点赞
    PAT L1-032 Left-pad
    PAT 甲级 1046 Shortest Distance
    PAT 甲级 1077 Kuchiguse
    PAT 甲级 1027 Colors in Mars
  • 原文地址:https://www.cnblogs.com/guo-xiang/p/4667926.html
Copyright © 2011-2022 走看看