1 构造图

2 代码

package leaning.graph;/** 迪杰斯特拉算法求最短路径* * */
public class Dijkstra {// 表示V0顶点到v8顶点的最短路径的值private int[] D = new int[9]; // 最短路径private  int[] P = new int[9]; //定义无穷大的数private int MAX = Integer.MAX_VALUE/2;//定义地图变量private int[][] map = new int[9][9];//定义顶点变量private String[] points = {"v0","v1","v2","v3","v4","v5","v6","v7","v8"};//初始化地图public void createMap(){this.map[0] = new int[]{  0,  1,  5,MAX,MAX,MAX,MAX,MAX,MAX};this.map[1] = new int[]{  1,  0,  3,  7,  5,MAX,MAX,MAX,MAX};this.map[2] = new int[]{  5,  3,  0,MAX,  1,  7,MAX,MAX,MAX};this.map[3] = new int[]{MAX,  7,MAX,  0,  2,MAX,  3,MAX,MAX};this.map[4] = new int[]{MAX,  5,  1,  2,  0,  3,  6,  9,MAX};this.map[5] = new int[]{MAX,MAX,  7,MAX,  3,  0,MAX,  5,MAX};this.map[6] = new int[]{MAX,MAX,MAX,  3,  6,MAX,  0,  2,  7};this.map[7] = new int[]{MAX,MAX,MAX,MAX,  9,  5,  2,  0,  4};this.map[8] = new int[]{MAX,MAX,MAX,MAX,MAX,MAX,  7,  4,  0};}//迪杰斯特拉算法核心public void dijkstraCore(){// 1 定义变量int[] final_ = new int[9] ; // final_[w]=1 表示已经从顶点V0访问了顶点Vw// 2 初始化定义变量for(int i = 0 ; i < this.points.length ;i++){final_[i] = 0;P[i] = 0;D[i] = this.map[0][i];}// 3 V0 -> V0节点final_[0] = 1; // 4 V0 -> 其它节点for(int i = 1 ; i < this.points.length ;i++){int min = this.MAX ;int k = -1;// 4.1 得到D带权数组最小值for(int j = 0 ; j < this.points.length ; j++ ){if( final_[j]!=1 && min > D[j]){min = D[j];k = j;}}final_[k] = 1;// 4.2 调整 P和D的值for(int j = 0 ; j < this.points.length ;j++){if(final_[j]!=1 && ( min + this.map[k][j] ) < D[j] ){D[j] = min + this.map[k][j];P[j] = k;}}}}// 输出v0顶点到pointName顶点的最短路径public void show(String pointName){int position = getNumber(pointName);System.out.println("V0顶点到顶点"+pointName+"\n最短路径值为: "+this.D[position] + " \n路径为 : " + this.getPath(pointName));}// 得到v0顶点到pointName顶点的路径public String getPath(String pointName){StringBuffer path = new StringBuffer();path.append(this.invertStr(pointName));int position = getNumber(pointName);int point = this.P[position];while(point!=0){path.append(" >- " + this.invertStr(this.points[point]) );point = this.P[point];}String pathString = path.append(" >- " + this.invertStr("v0") ).toString();return this.invertStr(pathString);}// 得到字符串从后往前顺序的结果public String invertStr(String str){StringBuffer result = new StringBuffer();for(int i = str.length() -1 ; i >= 0 ; i-- ){result.append(str.charAt(i));}return result.toString();}// 得到pointName在points数组中的位置public int getNumber(String pointName){int position = -1;for(int i = 0 ;  i < this.points.length ;i++  ){if(this.points[i].endsWith(pointName.replace(" ", ""))){position = i;break;}}return position;}public static void main(String[] args) {Dijkstra dijkstra = new Dijkstra();dijkstra.createMap();dijkstra.dijkstraCore();dijkstra.show("v8");}}

3 变量D和变量P解释

4 v0到v8输出结果

最短路径(迪杰斯特拉算法)相关推荐

  1. >算法笔记-动态规划-最短路径迪杰斯特拉算法

    算法笔记-动态规划-最短路径迪杰斯特拉算法 作者:星河滚烫兮 前言   图的最短路径问题在现实生活中有很广阔的应用,最短路径又分为单源最短路径与多源最短路径,前者求出固定起点到其他节点的最短路径,后者 ...

  2. 最短路径——迪杰斯特拉算法——图的数据结构

    最短路径是在工程上经常用到的概念,在这里给出了从单源点到任意顶点的迪杰斯特拉算法. 先来看看基本概念: 用代码C语言实现如下: #include<string.h>#include< ...

  3. 最短路径迪杰斯特拉算法--邻接矩阵

    一.算法介绍 迪杰斯特拉算法(解决单源最短路径) 基本思想:每次找到离源点(如1号节点)最近的一个顶点,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径. 基本步骤:1,设置标记数组bo ...

  4. 别说了,世界那么大我想去看看!(最短路径-迪杰斯特拉算法弗洛伊德算法)

    前言: 一直想去外面的世界看看,中国城市那么多,那么美,怎么样才可以用最少的钱,最短的时间游遍我想去的城市呢?(我在做梦?不不不!迪杰斯特拉算法和弗洛伊德算法来了)      这两个算法有着广泛的用途 ...

  5. 图的最短路径--迪杰斯特拉算法 c语言

    还是按照书上的例子: 完整代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #def ...

  6. 最短路径迪杰斯特拉算法 c语言,Dijkstra第K最短路径算法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //运筹学之最短路径 #include #include #define M 99999 int main() { int G[100][100]; in ...

  7. java 点到点最短路径,迪杰斯特拉算法处理无向图中最短路径的(dijkstra)Java实现(指定两点,求最短距离及路径) | 学步园...

    其实不是原创哈,我写不出来. 如何求图中V0到V5的最短路径呢? java实现的方式如下: 第一步,根据图来建立权值矩阵: int[][] W = { {  0,   1,   4,  -1,  -1 ...

  8. 校园导游系统(纯C语言实现)最短路径---迪杰斯特拉算法

    西京学院导游系统 学习数据结构+C语言可实现 #include <stdio.h> #include <stdlib.h> #include <conio.h> # ...

  9. L2-001 紧急救援 (25 分)最短路径 迪杰斯特拉算法

    L2-001 紧急救援 题目 代码 题目 L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城 ...

  10. (王道408考研数据结构)第六章图-第四节4:最短路径之迪杰斯特拉算法(思想、代码、演示、答题规范)

    文章目录 一:BFS算法局限性 二:迪杰斯特拉(dijkstra)算法基本思想 三:迪杰斯特拉(dijkstra)算法代码实现 四:迪杰斯特拉(dijkstra)算法代码视频演示 五:迪杰斯特拉(di ...

最新文章

  1. 057 Insert Interval 插入区间
  2. java中synchronized介绍和用法
  3. linux mysql换成_把 SQL Server 迁移到 Linux?不如换成 MySQL
  4. 哎哟我去!betterzip居然支持这么多压缩格式!
  5. JAVA 邮件发送工具类
  6. linux java远程调试_Visual Studio 2017 Linux远程调试(gdbserver)
  7. 基于 Flink 的严选实时数仓实践
  8. html2canvas解决保存图片模糊问题
  9. EasyExcel读写Excel的基本使用
  10. 直接将自身代码注入傀儡进程
  11. 关于SAP CRM Organization Unit组织结构单元自动决定的一些调试
  12. 字符串相似度算法——Levenshtein Distance算法
  13. 一文搞定 Spring Data Redis 详解及实战
  14. gym100825G. Tray Bien(轮廓线DP)
  15. MySQL中update修改数据与原数据相同会再次执行吗
  16. django登录跳转到另一个页面_[JWT]djangojson web token实现单用户登录
  17. 云计算和主机托管有哪几点不同?
  18. Spring-cloud学习教程视频
  19. 揭秘封包辅助外G:封包外G初体验(四)
  20. 鼠标失灵c语言代码,[转载]键盘和鼠标操作失灵代码

热门文章

  1. java中ThreadLocalRandom的使用
  2. Leet Code OJ 102. Binary Tree Level Order Traversal [Difficulty: Easy]
  3. linux out 日志,关于Linux中nohup.out日志过大问题(示例代码)
  4. python -- 计算 平方、乘方、平方根_从零开始学习PYTHON3讲义(二)把Python当做计算器...
  5. shell脚本命令set
  6. 【千字分析】剑指 Offer 47. 礼物的最大价值
  7. 【双100%解法】剑指 Offer 24. 反转链表
  8. 【最详细解析】1052 卖个萌 (20分)_28行代码AC
  9. 1027 打印沙漏 (20分)——27行代码AC(结构清晰)
  10. php 接口说明文档,phpwind文章中心接口说明