public class Dijsktra {

     public static void main(String[] args)
{
Dijsktra d=new Dijsktra();
int[][] w={{0,1},{2,0}}; int[] a=d.DijsktraWay(w,0);
//System.out.println(1111);
} // 返回来的是路径
public int[] DijsktraWay(int[][] weight, int start) { // 接受一个有向图的权重矩阵和一个起点编号start从0编号顶点存在数组中
// 返回一个int[] 数组表示从start到它的最短路径长度
int n = weight.length; // 顶点个数 int[] shortPath = new int[n]; // 存放从start到其他各点的最短路径
String[] path = new String[n]; // 存放从start到其他各点的最短路径的字符串表示
for (int i = 0; i < n; i++) {
path[i] = new String(start + ">" + i);
shortPath[i] = Integer.MAX_VALUE / 2;
}
int[] visited = new int[n]; // 标记当前该顶点的最短路径是否已经求出,1表示已求出
// 初始化第一个顶点求出
shortPath[start] = 0;//没有环
visited[start] = 1; // 表示已经访问过 for (int count = 1; count <= n - 1; count++) // 要加入n-1个顶点,每次加入一个点后
//就会有一个点被标记
{
int k = -1; // 选出一个距离初始顶点start最近的未标记顶点
int dmin = Integer.MAX_VALUE / 2;
for (int i = 0; i < n; i++) {
//如果此点未访问并且距离起始点距离较上一个的小,则应进行修改
if (visited[i] == 0 && weight[start][i] < dmin) {
dmin = weight[start][i];//表示距离起始点最近的点
k = i;//将距离起始点最近的点标记为k
}
} if (k == -1) {
break;
// return null;
}
// 将新选出的顶点标记为已求出最短路径且到start的最短路径就是dmin
shortPath[k] = dmin;
visited[k] = 1;
// 以k为中间点修正从start到未访问各点的距离
for (int i = 0; i < n; i++) {
if (visited[i] == 0 && weight[start][k] + weight[k][i] < weight[start][i]) {
weight[start][i] = weight[start][k] + weight[k][i];
path[i] = path[k] + ">" + i;
}
//System.out.println(shortPath[i]);
System.out.println( path[i]);
}
} return shortPath;
} }

确定起点的最短路径问题:即已知起始结点,求最短路径的问题。适合迪杰斯特拉算法。

确定终点的最短路径问题:与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径反转的确定起点的问题。

迪杰斯特拉(Java)的更多相关文章

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

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

  2. 迪杰斯特拉算法完整代码(Java)

    package com.rao.graph; import java.util.*; /** * @author Srao * @className Dijkstra * @date 2019/12/ ...

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

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

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

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

  5. 最短路径之迪杰斯特拉算法(Java)

    1)Dijkstra算法适用于求图中两节点之间最短路径 2)Dijkstra算法设计比较巧妙的是:在求源节点到终结点自底向上的过程中,源节点到某一节点之间最短路径的确定上(这也是我之前苦于没有解决的地 ...

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

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

  7. HDU6166-Senior Pan-Dijkstra迪杰斯特拉算法(添加超源点,超汇点)+二进制划分集合-2017多校Team09

    学长好久之前讲的,本来好久好久之前就要写题解的,一直都没写,懒死_(:з」∠)_ Senior Pan Time Limit: 12000/6000 MS (Java/Others)    Memor ...

  8. OpenJ_POJ C16G Challenge Your Template 迪杰斯特拉

    Challenge Your Template 题目连接: http://acm.hust.edu.cn/vjudge/contest/122701#problem/G Description ACM ...

  9. hdoj-2066-一个人的旅行(迪杰斯特拉)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

随机推荐

  1. Android优化——UI优化(一)优化布局层次

    优化布局层次 1.避免布局镶嵌过深(如下) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi ...

  2. canvas仿屏幕保护运动线条

    canvas是H5中及其重要的一个新标签,它得出现不仅让前端做图形图表功能变得异常强大,还用极强的性能丰富前端渲染页面的能力. Life is not a problem to be solved, ...

  3. msg url

  4. R语言利器之ddply和aggregate

    ddply和aggregate是两个用来整合数据的功能强大的函数. aggregate(x, ...) 关于aggregate()函数的使用在<R语言实战>中P105有简单描述,这里重新说 ...

  5. [教程]Oracle 11g Express 安装和使用教程

    使用工具的第一步就是安装工具,配置环境!下面就Oracle 11g Express的安装和简单实用做一简介. 一.下载安装过程 去oracle的官网下载Oracle 11g express,大概300 ...

  6. U3D prefab

    1,prefab相当于一个类,字面意思就是预设,预先设计好的类.把一个prefab拖放到场景中就生成了一个实例,把二个prefab放到场景中就生成了两个实例. 不同的实例独立动作,拥有自己独立的状态与 ...

  7. python学习三

    输入与输出 print()在括号中加上字符串,就可以向屏幕上输出指定的文字. >>>print('hello world')hello world print()函数也可以接受多个字 ...

  8. webapi同一个Controller多个函数

    现在用webapi发现一个问题,比如用get方法调用的的时候函数名好像没用,不管你写什么名称,它只认调用相同参数的一个函数,而且以get开头的函数虽然名称不同但是只要参数相同就会报错,无法调用怎么回事 ...

  9. 大前端时代已经到来!传智播客2015之WEB前端视频教程(全套教程共15G)

    大前端时代已经到来!传智播客2015之WEB前端视频教程(全套教程共15G)大前端时代已经到来!如今,前端开发工程师的职责,不是只有切图.制作网页这么简单哦! G:\传智播客2015-WEB前端视频教 ...

  10. jQuery.smoove — jQuery和CSS3炫酷滚动页面内容元素动画特效插件

    插件介绍: jQuery-smoove是一款jQuery和CSS3炫酷滚动页面内容元素动画特效插件.该内容元素动画插件在页面滚动到指定位置时,该位置的HTML元素会执行指定的CSS3动画特效,如旋转. ...