zoukankan      html  css  js  c++  java
  • 最短路---dijsktra--邻接矩阵

     1 const int  MAXINT = 32767;
     2 const int MAXNUM = 10;                     //点的个数
     3 int dist[MAXNUM];
     4 int prev[MAXNUM];
     5 
     6 int A[MAXUNM][MAXNUM];
     7 
     8 void Dijkstra(int v0)
     9 {
    10     bool S[MAXNUM];                                  // 新建一个标记数组,判断是否已存入该点到S集合中;
    11       int n=MAXNUM;
    12     for(int i=1; i<=n; ++i)                         
    13     {
    14         dist[i] = A[v0][i];                           //将该点的邻接矩阵复制到dist[]一维数组中;
    15         S[i] = false;                                // 初始都未用过该点;
    16         if(dist[i] == MAXINT)    
    17               prev[i] = -1;
    18         else 
    19               prev[i] = v0;                          //记录该点的上一节点是现在处理的源点,如果不联通为-1;
    20      }
    21      dist[v0] = 0;                                   //dist表示原点v0到该点的最短距离;
    22      S[v0] = true;                                  //将源点标记为已经访问;    
    23     for(int i=2; i<=n; i++)                         //循环n-1次,保证找到每一个点;
    24     {
    25          int mindist = MAXINT;                      //标记当前的最小距离,初始化为最大;
    26          int u = v0;                               // 找出当前未使用的点j的dist[j]最小值
    27          for(int j=1; j<=n; ++j)
    28             if((!S[j]) && dist[j]<mindist)
    29             {
    30                   u = j;                             // u保存当前邻接点中距离最小的点的号码 
    31                   mindist = dist[j];
    32             }                                       //找出了距离该源点最近的那个点,u记录了点的编号;
    33          S[u] = true; 
    34          for(int j=1; j<=n; j++)  
    35              if((!S[j]) && A[u][j]<MAXINT)           //找没有被使用过的点,且与u是联通的点;
    36              {
    37                  if(dist[u] + A[u][j] < dist[j])     //在通过新加入的u点路径找到离v0点更短的路径 ;(如果该点距离原点的距离比从u点过度过来的距离长,则当前的最短路就改变) 
    38                  {                                    
    39                      dist[j] = dist[u] + A[u][j];    //更新dist 
    40                      prev[j] = u;                    //记录前驱顶点 
    41                   }
    42               }                                     
    43      }
    44 }
    View Code
  • 相关阅读:
    可实现B站 蒙版弹幕 效果的前端组件 —— Barrage UI
    C# 中的"yield"使用
    不遮挡人物弹幕是怎么实现的——图片蒙版效果-webkit-mask
    使用eslint检查代码质量
    vue 项目中assets 和static的区别
    快速生成html文本文档——typora
    VsCode中好用的git源代码管理插件GitLens
    C# 根据前台校验的值,决定是否执行后台方法
    C# 从字符串中取出英文字母
    C# 科学计数法转换成数字
  • 原文地址:https://www.cnblogs.com/by-1075324834/p/4388919.html
Copyright © 2011-2022 走看看