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)的更多相关文章

  1. c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法

    c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线.假设途中每一站都需要换车,则这个问题反映到图上就是 ...

  2. 最短路径之迪杰斯特拉算法的Java实现

    Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法.该算法被称为是“贪心算法”的成功典范.本文接下来将尝试以最通俗的语言来介绍这个伟大的算法,并赋予java实现代码. 一.知识准备 ...

  3. 数据结构---公交线路提示系统05(内附读取表格+迪杰斯特拉算法Java代码)

    今天做的最多的事情就是纠错了,通过添加输出语句判断错误来源: 找到错误来源: wb = new XSSFWorkbook(input);//语句创建错误 网上查询发现是jar包的问题: 下图为poi的 ...

  4. [从今天开始修炼数据结构]图的最短路径 —— 迪杰斯特拉算法和弗洛伊德算法的详解与Java实现

    在网图和非网图中,最短路径的含义不同.非网图中边上没有权值,所谓的最短路径,其实就是两顶点之间经过的边数最少的路径:而对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,我们称路径上第 ...

  5. Java 迪杰斯特拉算法实现查找最短距离

    迪杰斯特拉算法 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是 ...

  6. C++迪杰斯特拉算法求最短路径

    一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...

  7. 最短路径之迪杰斯特拉(Dijkstra)算法

    迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...

  8. 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)

    上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...

  9. 图->最短路径->单源最短路径(迪杰斯特拉算法Dijkstra)

    文字描述 引言:如下图一个交通系统,从A城到B城,有些旅客可能关心途中中转次数最少的路线,有些旅客更关心的是节省交通费用,而对于司机,里程和速度则是更感兴趣的信息.上面这些问题,都可以转化为求图中,两 ...

随机推荐

  1. Linux如何上查看和退出tomcat实时日志

    1.先切换到:cd usr/local/tomcat/logs 目录下 2.tail -f catalina.out Ctrl+c 是退出tail命令. alt+E+R重置.

  2. input type="file"获取文件名方法

    文件上传比较丑,样式调整时会有一个获取文件名,或者包含文件路径的文件名的方法 html代码 <div class="file-box"> <form id=&qu ...

  3. django choice字段模板展示

    class UserInfo(AbstractUserInfo): """ 用户表 """ gender_choice = ( (1,&qu ...

  4. php读取mysql中文乱码

    连接mysql的文件: <?php /***************************** *数据库连接 *****************************/ $conn = @m ...

  5. 微信小程序之怎样识别一个小程序用户

    本节主要是说下怎样识别一个小程序的用户,需要用什么数据来做标识呢: 我们应该都知道判断是不是一个用户大部分都是通过userid来判断,如果这个用户访问的应用发送了一个请求,把userid之类的数据发给 ...

  6. Simotion应用案例,使用Simotion web server调试,使用Project Generator创建项目,Simosim模拟运行运行项目

    Simotion web server simotion项目设计和调试过程中,web server功能越来越常用.例如Project generator生成的FBAxis, winder, print ...

  7. Torch.no_grad()影响MSE损失

    相关描述 https://discuss.pytorch.org/t/torch-no-grad-affecting-outputs-loss/28595/3 今天在训练网络的时候,发现mseloss ...

  8. 利用Js或Css滤镜实现IE6中PNG图片半透明效果 IE6PNG妥妥的

    接下来介绍几种PNG图片在IE6中不透明的解决办法 1.用自己的PNG,让IE6一边去吧 首先制作PNG图片的时候,另存为一个GIF图片,因为IE6是支持GIF图片透明,然后在css定义 .pngte ...

  9. javascript当中的无限分类

    var data = [ {id:100000, name :"1", pid :0}, {id:100100, name :"1-1", pid :10000 ...

  10. 使用Excel管理命令输出

    效果图:(饼状图为后添加) 实现代码: