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

转载于:https://www.cnblogs.com/by-1075324834/p/4388919.html

最短路---dijsktra--邻接矩阵相关推荐

  1. 【USACO 2007 February Silver】农场派对

    Description N(1<=N<=1000)头牛要去参加一场在编号为x(1<=x<=N)的牛的农场举行的派对.有M(1<=M<=100000)条有向道路,每条 ...

  2. 第十二届蓝桥杯2021年C++A组省赛题解

    文章目录 注 考生须知 试题A:卡片 试题B:直线 题解 代码(set + map) 试题C:货物摆放 题解 代码 试题D:路径 题解 代码 试题E:回路计数 题解 代码 试题F:砝码称重 题解 代码 ...

  3. Celoria的板子(last update:20201017)

    文章目录 数据结构 树状数组 基础 二维树状数组 逆序对 线段树 CDQ分治 树论 树的重心 定义 性质 代码 树的直径 性质 代码 LCA 主席树 平衡树 替罪羊树 Treap 区间翻转 Splay ...

  4. 求解最短路问题的几种方法总结

    1.spfa求单源最短路,链式前向星存图, 时间复杂度o(kE) k是常数,大多数情况下为2. #include <stdio.h> #include <queue> #inc ...

  5. 邻接矩阵和邻接表_[力扣743] 带权邻接表的单源最短路

    题目链接 743. 网络延迟时间 题目描述 有 N 个网络节点,标记为 1 到 N. 给定一个列表 times,表示信号经过有向边的传递时间. times[i] = (u, v, w),其中 u 是源 ...

  6. 迷阵突围 (dijkstra求次短路)邻接表,邻接矩阵

    分析:dijkstra算法求最短路问题.先求最短路,再依次删除最短路上的边,每次删除一条,使用dijkstra求此时的最短路,更新最小值,最后得到第二短路.f标记删除与否,抑或便于寻找无向图的两条边. ...

  7. Floyd(弗洛伊德)算法(邻接矩阵与邻接表实现)——暴力求解多源点最短路

    文章目录 Floyd(弗洛伊德)算法(邻接矩阵与邻接表实现)--暴力求解多源点最短路 简介 思想与原理 邻接矩阵解题模板 邻接表解题模板 Floyd(弗洛伊德)算法(邻接矩阵与邻接表实现)--暴力求解 ...

  8. 数据结构——基于 Dijsktra 算法的最短路径求解

    实验七 基于 Dijsktra 算法的最短路径求解 [实验目的] 掌握图的邻接矩阵表示法,掌握采用邻接矩阵表示法创建图的算法. 掌握求解最短路径的 Dijsktra 算法. [实验内容] 问题描述 一 ...

  9. 图论学习-最短路模型

    这里只是我对于最短路模型学习的一个记录,不正确的地方希望大家指出. 文章目录 最短路模型 一. 什么是最短路? 1.1 概念 1.2 基本术语 二.主要模型 2.1 dijkstra 2.1.1 步骤 ...

  10. [C] [最短路] 只有5行的算法:Floyd-Warshall

    终于学到求最短路了,终于来到我最喜欢的算法--Floyd-Warshall了!今天还有点小激动呢! 我喜欢它,当然是因为它逻辑十分简单咯!真的只有5行诶! Floyd-Warshall算法 题目描述 ...

最新文章

  1. R语言计算回归模型标准化残差实战(Standardized Residuals):识别回归模型中离群点
  2. 【Android 逆向】代码调试器开发 ( ptrace 函数 | 向进程内存写出数据 )
  3. 知识图谱(知识图谱构建)
  4. 案例 | 铅酸蓄电池精细维护
  5. 一个比较完整的Inno Setup 安装脚本
  6. Lecture 4 Quick Sort and Randomized Quick Sort
  7. Java LinkedList公共对象peek()方法(带示例)
  8. CVPR 2021 3D视觉相关最新进展分享
  9. Class绑定、Class对象绑定、v-if(条件渲染)、v-show(元素显示)、v-for(列表渲染)
  10. oracle 的 dml,Oracle——DML
  11. Java面试官:Kafka集群管理
  12. json 和 数组的区别
  13. SDACM 五一联赛 3 G - L
  14. python3解析纯真ip数据库
  15. 算法模板-深度优先遍历
  16. 天使投资人杨宁:百度轻应用让移动时代很多不可能成为可能
  17. < abbr >标签 缩写
  18. Lambda表达式的几种简化形式
  19. 简述新图像文件格式——SVG
  20. python画国旗和八卦图

热门文章

  1. VC控件 Check Box
  2. idea自动为行尾加分号
  3. Pixhawk代码分析-姿态解算篇B
  4. java中ftp删除文件,Java 实现ftp 文件上传、下载和删除
  5. go 使用sarama写入kafka数据时间戳问题
  6. 并查集(加权规则、折叠规则)
  7. service调用的存储过程里显式commit,而导致事务不能rollback
  8. ActiveMQ 学习(VM Transport)
  9. Tianlesoftware Oracle 学习 手册 第一版
  10. IDEA创建多个模块MavenSpringBoot项目