最短路径(迪杰斯特拉算法)
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输出结果
最短路径(迪杰斯特拉算法)相关推荐
- >算法笔记-动态规划-最短路径迪杰斯特拉算法
算法笔记-动态规划-最短路径迪杰斯特拉算法 作者:星河滚烫兮 前言 图的最短路径问题在现实生活中有很广阔的应用,最短路径又分为单源最短路径与多源最短路径,前者求出固定起点到其他节点的最短路径,后者 ...
- 最短路径——迪杰斯特拉算法——图的数据结构
最短路径是在工程上经常用到的概念,在这里给出了从单源点到任意顶点的迪杰斯特拉算法. 先来看看基本概念: 用代码C语言实现如下: #include<string.h>#include< ...
- 最短路径迪杰斯特拉算法--邻接矩阵
一.算法介绍 迪杰斯特拉算法(解决单源最短路径) 基本思想:每次找到离源点(如1号节点)最近的一个顶点,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径. 基本步骤:1,设置标记数组bo ...
- 别说了,世界那么大我想去看看!(最短路径-迪杰斯特拉算法弗洛伊德算法)
前言: 一直想去外面的世界看看,中国城市那么多,那么美,怎么样才可以用最少的钱,最短的时间游遍我想去的城市呢?(我在做梦?不不不!迪杰斯特拉算法和弗洛伊德算法来了) 这两个算法有着广泛的用途 ...
- 图的最短路径--迪杰斯特拉算法 c语言
还是按照书上的例子: 完整代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #def ...
- 最短路径迪杰斯特拉算法 c语言,Dijkstra第K最短路径算法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //运筹学之最短路径 #include #include #define M 99999 int main() { int G[100][100]; in ...
- java 点到点最短路径,迪杰斯特拉算法处理无向图中最短路径的(dijkstra)Java实现(指定两点,求最短距离及路径) | 学步园...
其实不是原创哈,我写不出来. 如何求图中V0到V5的最短路径呢? java实现的方式如下: 第一步,根据图来建立权值矩阵: int[][] W = { { 0, 1, 4, -1, -1 ...
- 校园导游系统(纯C语言实现)最短路径---迪杰斯特拉算法
西京学院导游系统 学习数据结构+C语言可实现 #include <stdio.h> #include <stdlib.h> #include <conio.h> # ...
- L2-001 紧急救援 (25 分)最短路径 迪杰斯特拉算法
L2-001 紧急救援 题目 代码 题目 L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城 ...
- (王道408考研数据结构)第六章图-第四节4:最短路径之迪杰斯特拉算法(思想、代码、演示、答题规范)
文章目录 一:BFS算法局限性 二:迪杰斯特拉(dijkstra)算法基本思想 三:迪杰斯特拉(dijkstra)算法代码实现 四:迪杰斯特拉(dijkstra)算法代码视频演示 五:迪杰斯特拉(di ...
最新文章
- 057 Insert Interval 插入区间
- java中synchronized介绍和用法
- linux mysql换成_把 SQL Server 迁移到 Linux?不如换成 MySQL
- 哎哟我去!betterzip居然支持这么多压缩格式!
- JAVA 邮件发送工具类
- linux java远程调试_Visual Studio 2017 Linux远程调试(gdbserver)
- 基于 Flink 的严选实时数仓实践
- html2canvas解决保存图片模糊问题
- EasyExcel读写Excel的基本使用
- 直接将自身代码注入傀儡进程
- 关于SAP CRM Organization Unit组织结构单元自动决定的一些调试
- 字符串相似度算法——Levenshtein Distance算法
- 一文搞定 Spring Data Redis 详解及实战
- gym100825G. Tray Bien(轮廓线DP)
- MySQL中update修改数据与原数据相同会再次执行吗
- django登录跳转到另一个页面_[JWT]djangojson web token实现单用户登录
- 云计算和主机托管有哪几点不同?
- Spring-cloud学习教程视频
- 揭秘封包辅助外G:封包外G初体验(四)
- 鼠标失灵c语言代码,[转载]键盘和鼠标操作失灵代码
热门文章
- java中ThreadLocalRandom的使用
- Leet Code OJ 102. Binary Tree Level Order Traversal [Difficulty: Easy]
- linux out 日志,关于Linux中nohup.out日志过大问题(示例代码)
- python -- 计算 平方、乘方、平方根_从零开始学习PYTHON3讲义(二)把Python当做计算器...
- shell脚本命令set
- 【千字分析】剑指 Offer 47. 礼物的最大价值
- 【双100%解法】剑指 Offer 24. 反转链表
- 【最详细解析】1052 卖个萌 (20分)_28行代码AC
- 1027 打印沙漏 (20分)——27行代码AC(结构清晰)
- php 接口说明文档,phpwind文章中心接口说明