zoukankan      html  css  js  c++  java
  • 最短路:我的理解--Dijkstra算法

    最短路径:Dijkstra算法
    用来计算从一个点到其他所有点的最短路径的算法,是一种单源最短路径算法。也就是说,只能计算起点只有一个的情况。
    Dijkstra的时间复杂度是O (N2),它不能处理存在负边权的情况。
    算法描述:
           设起点为sdis[v]表示从sv的最短路径,pre[v]v的前驱节点,用来输出路径。
           a)初始化:dis[v]=(vs); dis[s]=0; pre[s]=0;
           b)For (i = 1; i <= n-1 ; i++)//从1到n-1的原因,因为每次都用1个点去更新其他的点,除了1以外,还有n-1个点可以使用
                1.在没有被访问过的点中找一个顶点u使得dis[u]是最小的。
                2.u标记为已确定最短路径
                3.For u相连的每个未确定最短路径的顶点v(因为先入队的dist一定小,那么用后来入队的dist大的点去更新小的点,没有意义,这也就是迪杰斯特拉不能处理负权回路的原因)
                  if  (dis[u]+w[u][v] <</b> dis[v])
                   {
                      dis[v] = dis[u] + w[u][v];
                      pre[v] = u;
                   }
            c)算法结束:dis[v]sv的最短距离;pre[v]v的前驱节点,用来输出路径。
  • 相关阅读:
    071 Simplify Path 简化路径
    070 Climbing Stairs
    069 Sqrt(x) 求平方根
    067 Add Binary 二进制求和
    bzoj3295: [Cqoi2011]动态逆序对
    bzoj1598: [Usaco2008 Mar]牛跑步
    bzoj1492: [NOI2007]货币兑换Cash
    bzoj2683(要改一点代码)&&bzoj1176: [Balkan2007]Mokia
    bzoj2190: [SDOI2008]仪仗队
    bzoj3262: 陌上花开
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5370741.html
Copyright © 2011-2022 走看看