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

    const int  MAXINT = 32767;
    const int MAXNUM = 10;
    int dist[MAXNUM];
    int prev[MAXNUM];
    
    int A[MAXUNM][MAXNUM];
    
    void Dijkstra(int v0)
    {
        bool S[MAXNUM];                                  // 判断是否已存入该点到S集合中
          int n=MAXNUM;
        for(int i=1; i<=n; ++i)
        {
            dist[i] = A[v0][i];    //初始化dist数组
             S[i] = false;                                // 初始都未用过该点
            if(dist[i] == MAXINT)    
                  prev[i] = -1;    //prev[]表示当前节点的前一个结点
            else 
                  prev[i] = v0;
         }
         dist[v0] = 0;
         S[v0] = true;   
        for(int i=2; i<=n; i++)
        {
             int mindist = MAXINT;
             int u = v0;                               // 找出当前未使用的点j的dist[j]最小值
             for(int j=1; j<=n; ++j)
                if((!S[j]) && dist[j]<mindist)        //dist[j] < middist 表明当前节点的邻节点未被访问,这个和for循环一起使用表明寻找当前节点的最小dist[]的值
                {
                      u = j;                             // u保存当前邻接点中距离最小的点的号码 
                      mindist = dist[j];
                }
             S[u] = true;     //每次找到最小的dist然后将这个设为true
             for(int j=1; j<=n; j++)
                 if((!S[j]) && A[u][j]<MAXINT)    
                 {
                     if(dist[u] + A[u][j] < dist[j])     //在通过新加入的u点路径找到离v0点更短的路径  
                     {
                         dist[j] = dist[u] + A[u][j];    //更新dist 
                         prev[j] = u;                    //记录前驱顶点 
                      }
                  }
         }
    }

    V为当前节点,A,B,C 为之前的节点(未被收进dist数组中的节点)X,Y,Z为V的邻节点,那么下一个节点总是再A,B,C,X,Y,Z中取dist[]最小的节点

  • 相关阅读:
    hadoop 异常及处理总结-02(小马哥精品)
    Linux环境变量(小马哥推荐)
    Apache Tomcat 8.5 安全配置与高并发优化
    深入理解分布式系统中的缓存架构(上)
    Redis的n种妙用,不仅仅是缓存
    springBoot整合ecache缓存
    Spark Streaming实时处理应用
    Spark 实践
    spark性能调优
    Spark调优
  • 原文地址:https://www.cnblogs.com/guosai1500581464/p/13260172.html
Copyright © 2011-2022 走看看