Dijkstra最短路径算法——java代码实现
具体的算法详解可以看这篇博客Dijkstra最短路径算法详解。
这里我利用.txt文件存储了有向加权图中顶点之间的连接关系以及边上的权重,文件格式如下:
代码所构造的有向加权图如下:
package Graph;import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;public class AdjMatrix {public int index; //中转点的索引public int distance; //最短距离public boolean flag; public static ArrayList<Integer> transfer; //中转点数组private int V; //顶点个数private int E; //边的个数private int[][] adj; //邻接矩阵private int[] dis; //所有点的最短距离public int findMin(int[] arr) {flag=false;int min=(int)Double.POSITIVE_INFINITY;for(int i=0;i<arr.length;i++) {if(arr[i]<min&&arr[i]!=0) {min=arr[i];index=i;flag=true;}}return min;}public AdjMatrix(String fileName) {File file=new File(fileName);try {Scanner scanner=new Scanner(file);V=scanner.nextInt();adj=new int[V][V];int inf=(int) Double.POSITIVE_INFINITY;for(int i=0;i<V;i++) {for(int j=0;j<V;j++) {if(i!=j)adj[i][j]=inf;}}E=scanner.nextInt();for(int i=0;i<E;i++) {int a=scanner.nextInt();int b=scanner.nextInt();int w=scanner.nextInt();//数组相应位置处有顶点之间连接的赋值为1adj[a][b]=w;}transfer=new ArrayList<>();transfer.add(0);dis=new int[V];for(int i=0;i<V;i++) {dis[i]=adj[0][i];}index=0;while(true) {int mindis=findMin(adj[index]);if(flag==false)break;transfer.add(index);distance+=mindis;for(int i=0;i<V;i++) {if(adj[index][i]!=inf) {dis[i]=distance+adj[index][i];}}}System.out.println("Minimum distance between points:");for(int i=0;i<V;i++){System.out.print(dis[i]+" ");}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {AdjMatrix adj=new AdjMatrix("graph.txt");System.out.println("\nThe apex of the path:");System.out.println(transfer);}
}
运行结果如下:
Minimum distance between points:
0 1 8 4 13 17
The apex of the path:
[0, 1, 3, 2, 4, 5]
最短路径如下所示:
Dijkstra最短路径算法——java代码实现相关推荐
- Dijkstra 单源最短路径算法 Java实现
Dijkstra 单源最短路径算法 Java实现 算法导入 算法核心 复杂度分析 时间复杂度 空间复杂度 代码实现 参考资料 结尾 算法导入 在图论中,求最短路径有一个经典的算法 Dijkstra算法 ...
- Johnson 全源最短路径算法 Java实现
Johnson 全源最短路径算法 Java实现 算法导入 算法核心 复杂度分析 时间复杂度 空间复杂度 代码实现 参考资料 End 算法导入 在之前的文章中,我们讲述了: 经典入门的Dijkstra算 ...
- 算法学习(10):LeetCode刷题之Dijkstra最短路径算法
前言: 迪杰斯特拉(Dijkstra)最短路径算法是求有向加权图中某个节点到其他节点的最短路径."图"这种数据结构的具体实现就是"邻接矩阵"或者"邻接 ...
- 算法分析与设计课程设计-Dijkstra最短路径算法
算法分析与设计课程设计报告书 题目:Dijkstra最短路径算法 设计人:张钦颖 班级:14计科2班 学号:1414080901218 一. 实验环境: 1.硬件环境:个人机 ...
- aes算法c语言实现_C语言实现常用数据结构:Dijkstra最短路径算法(第18篇)
「今天是学习C语言第 161 天」 纸上学来终觉浅,绝知此事要躬行.-- 陆游「冬夜读书示子聿」#题外话算法学习重点是学习如何编程使用它. # Dijkstra算法 Dijkstra算法,中文译名迪杰 ...
- Python 图_系列之纵横对比 Bellman-Ford 和 Dijkstra 最短路径算法
1. 前言 因无向.无加权图的任意顶点之间的最短路径由顶点之间的边数决定,可以直接使用原始定义的广度优先搜索算法查找. 但是,无论是有向.还是无向,只要是加权图,最短路径长度的定义是:起点到终点之间所 ...
- 算法导论——24.2 DAG最短路径算法java实现
介绍 Bellman-Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题,但是对于DAG,可以有更加简化的算法去计算,使得时间复杂度更低. 针对DAG的特点,以拓扑排序为基础,提出了解 ...
- c语言迪杰斯特拉算法求最短路径,迪杰斯特拉 ( Dijkstra ) 最短路径算法
迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径.它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本 ...
- Dijkstra最短路径算法C++带图详解
一.问题定义 求解单元点的最短路径问题:给定带权有向图G和源点v,求v到G中其他顶点的最短路径 限制条件:图G中不存在负权值的边 二.思想 划重点,迪杰斯特拉最最朴素的思想就是按长度递增的次序产生最短 ...
最新文章
- 3D-HEVC视频编码技术
- Go中有一个foreach循环吗?
- MJExtension 模型嵌套模型数组
- centos6 nodejs 安装测试
- nginx搭建tomcat分布式集群
- oracle数据泵导入导出_【软件】R语言数据导入与导出
- c 程序设计语言西电科大,西安电子科技大学
- 敏捷开发绩效管理之五:敏捷开发生产率(上)(故事点估算)
- python 平方根_数的Python平方根
- 难于传播的正能量,来点干货
- 9. Git flow
- 支付宝支付提示 4006 ISV权限不足
- 三极管实现与门、或门和非门操作
- TC397 EVADC
- warframe星际战甲氏族颜料35种全获取机制和获取流程攻略
- 四层PCB核心板制作6——BGA引脚扇出与电路扇孔
- 初二年级男生厌学家长应该怎么应对
- 微信小程序常用视图容器组件
- 笔记本电脑连接显示器如何让笔记本电脑单纯作为一台主机进行使用/笔记本连接显示器以后只需要显示器进行显示的操作! 2021/1/16
- 游戏 AI 设计之 FSM 有限状态机
热门文章
- 「Don‘t Make Me Think」 读后感
- kicad 排针_xconch: 神奇海螺,是时候该结束开发板裸奔的时代了。采用堆叠设计,拥有漂亮外观及超强扩展性。一款完全开源的结构及通用硬件扩展平台,旨在大家能更欢乐的DIY。...
- 深度优先搜索和广度优先搜索
- 改变 Windows 用户文件夹默认位置
- UltraEdit--用法--快捷键/配置/背景色/字体大小
- Kafka3.0 提交offset方式
- 【Excel】常用的excel表格操作
- 诚之和:SQL Where – 子句示例
- 安卓手机卡顿怎么解决_手机卡了,内存不能乱清理!试试这3个方法,有效解决手机卡顿...
- Python3.x爬虫教程:爬网页、爬图片、自动登录