迪杰斯特拉 (Dijkstra)算法求最短路径问题

简介: 迪杰斯特拉( Dijkstra )算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。

目录
算法介绍
应用实例
算法步骤
代码实现
__

算法介绍
迪杰斯特拉( Dijkstra )算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。
应用实例

算法步骤
1)设置出发顶点为 v ,顶点集合 VfvI ,v2, vi .), v 到 V 各顶点的距离构成距离集合 Dis , Dis ( dI ,d2, di .), Dis 集合记录着 v 到图中各顶点的距离(到自身可以看作0, v 到 vi 距离对应为 di )
2)从 Dis 中选择值最小的 di 并移出 Dis 集合,同时移出 V 集合中对应的项点 vi ,此时的 v 到 vi 即为最短路径
3)更新 Dis 集合,更新规则为:比较 v 到 V 集合中顶点的距离值,与 v 通过 vi 到 V 集合中顶点的距离值,保留
值较小的一个(同时也应该更新顶点的前驱节点为 vi ,表明是通过 vi 到达的)
4)重复执行两步骤,直到最短路径顶点为目标顶点即可结束。
代码实现

  1. import java.util.Arrays;
  2. public class _最短路{
  3. static int[] vis;//标记已经访问的顶点 0未访问 1 访问
  4. static int[] dis;//出发顶点到各个下标对应顶点的最短距离
  5. static int[] pre;//每个下标对应的上一个顶点下标
  6. static char[] vertex;//顶点
  7. static int[][] matrix;//邻接矩阵
  8. public static void main(String[] args) {
  9. vertex= new char[]{'A','B','C','D','E','F','G'};
  10. matrix = new intvertex.length;
  11. chushihua(matrix);//初始化邻接矩阵
  12. djstl(vertex.length,6);//调用算法
  13. }
  14. public static void djstl(int length,int start) {
  15. vis=new int[length];
  16. dis=new int[length];
  17. pre=new int[length];
  18. Arrays.fill(dis, 9999);//初始化距离为较大值
  19. dis[start] = 0;//初始化出发顶点到自身的距离0
  20. / 先将起始点到与其连通的顶点的路径及pre前一个顶点进行更新/
  21. update(start);
  22. //在以与起始点相连的顶点为起点 更新距离和路径
  23. for (int i = 1; i < vertex.length; i++) {
  24. int minIndex = -1;
  25. int mindis=9999;
  26. //找到一个最短路径
  27. for (int j = 0; j < vertex.length; j++) {
  28. if(vis[j]==0 && dis[j] < mindis) {
  29. minIndex = j;
  30. mindis = dis[j];
  31. }
  32. }
  33. vis[minIndex] = 1;
  34. update(minIndex);//继续更新
  35. }
  36. System.out.println(Arrays.toString(dis));
  37. }
  38. /**
    • 以index顶点向下查找!!!以起点start到index附近的邻接结点的最短路径!!!
    • @param index
  39. */
  40. public static void update(int index) {
  41. vis[index] = 1;//index标记为已访问
  42. int len= 0;//len:从start顶点到index顶点的距离+上从index再到i顶点的距离
  43. //循环遍历每个邻接结点顶点,找到真正意义上的最短路径
  44. for (int i = 0; i < matrix[index].length; i++) {
  45. //记录从start顶点到index顶点的距离+上从index再到i顶点的距离
  46. len = dis[index] + matrixindex;
  47. //将dis[i] 即从start直接到i 的距离 与len进行比较
  48. if(vis[i] == 0 && len < dis[i]) {
  49. dis[i] = len;//更新最短路径
  50. pre[i] = index;//更新前置顶点
  51. }
  52. }
  53. }
  54. /**
    • 初始化邻接矩阵
    • @param matrix
  55. */
  56. public static void chushihua(int[][] matrix) {
  57. final int N = 9999;
  58. matrix[0]=new int[]{N,5,7,N,N,N,2};
  59. matrix[1]=new int[]{5,N,N,9,N,N,3};
  60. matrix[2]=new int[]{7,N,N,N,8,N,N};
  61. matrix[3]=new int[]{N,9,N,N,N,4,N};
  62. matrix[4]=new int[]{N,N,8,N,N,5,4};
  63. matrix[5]=new int[]{N,N,N,4,5,N,6};
  64. matrix[6]=new int[]{2,3,N,N,4,6,N};
  65. }
  66. }
相关文章
|
3月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
104 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
3月前
|
存储 算法 程序员
迪杰斯特拉(Dijkstra)算法(C/C++)
迪杰斯特拉(Dijkstra)算法(C/C++)
|
5月前
|
算法 定位技术
路径规划算法 - 求解最短路径 - A*(A-Star)算法
路径规划算法 - 求解最短路径 - A*(A-Star)算法
175 1
|
5月前
|
机器学习/深度学习 算法 Java
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
这篇文章介绍了基于贪婪技术思想的Prim算法和Dijkstra算法,包括它们的伪代码描述、Java源代码实现、时间效率分析,并展示了算法的测试用例结果,使读者对贪婪技术及其应用有了更深入的理解。
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
|
5月前
|
自然语言处理 算法
HanLP — HMM隐马尔可夫模型 - 路径规划算法 - 求解最短路径 - 维特比(Viterbi)算法
HanLP — HMM隐马尔可夫模型 - 路径规划算法 - 求解最短路径 - 维特比(Viterbi)算法
69 0
HanLP — HMM隐马尔可夫模型 - 路径规划算法 - 求解最短路径 - 维特比(Viterbi)算法
|
2天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
15天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
149 80
|
3天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
3天前
|
算法
基于龙格库塔算法的锅炉单相受热管建模与matlab数值仿真
本设计基于龙格库塔算法对锅炉单相受热管进行建模与MATLAB数值仿真,简化为喷水减温器和末级过热器组合,考虑均匀传热及静态烟气处理。使用MATLAB2022A版本运行,展示自编与内置四阶龙格库塔法的精度对比及误差分析。模型涉及热传递和流体动力学原理,适用于优化锅炉效率。
|
8天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。

热门文章

最新文章