最短路径之迪杰斯特拉算法(Java)
1)Dijkstra算法适用于求图中两节点之间最短路径
2)Dijkstra算法设计比较巧妙的是:在求源节点到终结点自底向上的过程中,源节点到某一节点之间最短路径的确定上(这也是我之前苦于没有解决的地方),其解决方法是通过比较每次循环中源节点到各个节点的权值来找出最小值即最短路径,然后再对各个权值进行修正,再循环。。。这种求最短路径的方式与图最小生成树算法之Kruskal(克鲁斯卡尔)算法有异曲同工之妙;
3)该算法的时间复杂度度是O(N^2),N是节点的个数。
源码:
package com.neuedu.algorithm;//算法 //最短路径之迪杰斯特拉
public class Dijkstra {
//初始化
//stark--->k
//stark--->k--->i的距离 < stark--->i的距离
//重复23步骤
static int M=10000;//设置距离最大值表示此路不通
public static void main(String[] args) {
int [] [] weight= {
{0,34,43,58,M,76,243},
{342,0,M,54,M,32,4},
{2,4,0,M,67,8,32},
{6,98,34,0,M,5,55},
{34,45,66,77,0,423,M},
{2,4,340,M,67,0,32},
{34,45,66,77,566,M,0}
};
int start=0;
int [] shortPath=dijkstra(weight,start);
for (int i = 0; i < shortPath.length; i++) {
System.out.println(start+"到"+i+"的最短距离为:"+shortPath[i]);
}
}
private static int[] dijkstra(int[][] weight, int start) {
int n=weight.length;//确定有几个顶点
int [] shortPath=new int[n];//记录从start到每个顶点的最短路径
String [] path=new String[n];//记录从start到每个顶点最短路径经过的点
int [] visited=new int[n];//记录每个点是否已获得最短路径
for (int i = 0; i <n; i++) {
path[i]= new String(start+"--->"+i);
}
shortPath[start]=0;
visited[start]=1;
for (int count = 1; count < n; count++) {
int k=-1;//找出最短路径的点
int dmin=Integer.MAX_VALUE;//记录最短路径
for (int i = 0; i <n; i++) {
if (visited[i]!=1&&weight[start][i]<dmin) {
k=i;
dmin=weight[start][i];
}
}
System.out.println("k="+k);
shortPath[k]=dmin;
visited[k]=1;
for (int i = 0; i <n; i++) {
if (visited[i]!=1&&weight[start][k]+weight[k][i]<weight[start][i]) {
path[i]=path[k]+"--->"+i;
weight[start][i]=weight[start][k]+weight[k][i];
}
}
}
for (int i = 0; i < n; i++) {
System.out.println(start+"到"+i+"的最短路径为:"+path[i]);
}
return shortPath;
}
}
最短路径之迪杰斯特拉算法(Java)的更多相关文章
- c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法
c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线.假设途中每一站都需要换车,则这个问题反映到图上就是 ...
- 最短路径之迪杰斯特拉算法的Java实现
Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法.该算法被称为是“贪心算法”的成功典范.本文接下来将尝试以最通俗的语言来介绍这个伟大的算法,并赋予java实现代码. 一.知识准备 ...
- 数据结构---公交线路提示系统05(内附读取表格+迪杰斯特拉算法Java代码)
今天做的最多的事情就是纠错了,通过添加输出语句判断错误来源: 找到错误来源: wb = new XSSFWorkbook(input);//语句创建错误 网上查询发现是jar包的问题: 下图为poi的 ...
- [从今天开始修炼数据结构]图的最短路径 —— 迪杰斯特拉算法和弗洛伊德算法的详解与Java实现
在网图和非网图中,最短路径的含义不同.非网图中边上没有权值,所谓的最短路径,其实就是两顶点之间经过的边数最少的路径:而对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,我们称路径上第 ...
- Java 迪杰斯特拉算法实现查找最短距离
迪杰斯特拉算法 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是 ...
- C++迪杰斯特拉算法求最短路径
一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...
- 最短路径之迪杰斯特拉(Dijkstra)算法
迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...
- 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)
上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...
- 图->最短路径->单源最短路径(迪杰斯特拉算法Dijkstra)
文字描述 引言:如下图一个交通系统,从A城到B城,有些旅客可能关心途中中转次数最少的路线,有些旅客更关心的是节省交通费用,而对于司机,里程和速度则是更感兴趣的信息.上面这些问题,都可以转化为求图中,两 ...
随机推荐
- msfconsole 控制台使用和操作
msfconsole 参数 Msfconsole提供了一个一体化的集中控制台.通过msfconsole,你可以访问和使用所有的metasploit的插件,payload,利用模块,post模块等等.M ...
- Select2实现的带搜索的省市区三级联动代码 设置默认初始值
$(function() { $('#loc_province').select2('val','2456'); $('#loc_province').change(); $('#loc_city') ...
- 《Cron表达式详解》
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth Month ...
- Form上传编译
编译上传的Form,使用命令: 在R12服务器上: cd $AU_TOP/forms/US frmcmp_batch module=$CUX_TOP/forms/ZHS/XXX.fmbuserid=a ...
- 菜鸟 学注册机编写之 Android app
0x00前言 环境及工具: 手机 Nexus 4(己root) 系统版本 Android 5.01 工具 AndroidKiller_V1.2 关于Android平台app注册机的编 ...
- win10 mstsc 远程,登录失败,账号限制
问题: win7操作系统在局域网共享文件时,有时会遇到“登录失败:用户账户限制.可能的原因包括不允许空密码,登录时间限制,或强制的策略限制.”的情况,这要怎么解决呢 解决步骤: 1.按WIN+R,调出 ...
- Windows Host 文件
Windows XP Home / Windows 7/ Windows Server 2008 c:\windows\system32\drivers\etc\hosts 如果碰到Localhost ...
- node实现爬虫
node实现获取到豆瓣电影排行榜页面. 准备工作: 1.新建一个文件夹node 在当前文件夹中打开cmd 下载 npm install 初始化 npm init(注意一下:如果你的npm init没有 ...
- Selenium入门13 cookie的增删改查
cookie的增删改查: 查询:get_cookies()查询所有cookie,get_cookie(cookie的name)获取单个cookie 删除:delete_cookie(cookie的na ...
- ArcGIS License Server Administrator 10.2 无法启动许可的解决办法
刚刚重装了电脑,安装ArcGIS的时候,安装完desktop之后又安装了License Manager,结果把破解文件替换完之后,发现ArcGIS License Server Administrat ...