迪杰斯特拉(Java)
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)的更多相关文章
- 最短路径之迪杰斯特拉算法的Java实现
Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法.该算法被称为是“贪心算法”的成功典范.本文接下来将尝试以最通俗的语言来介绍这个伟大的算法,并赋予java实现代码. 一.知识准备 ...
- 迪杰斯特拉算法完整代码(Java)
package com.rao.graph; import java.util.*; /** * @author Srao * @className Dijkstra * @date 2019/12/ ...
- 数据结构---公交线路提示系统05(内附读取表格+迪杰斯特拉算法Java代码)
今天做的最多的事情就是纠错了,通过添加输出语句判断错误来源: 找到错误来源: wb = new XSSFWorkbook(input);//语句创建错误 网上查询发现是jar包的问题: 下图为poi的 ...
- Java 迪杰斯特拉算法实现查找最短距离
迪杰斯特拉算法 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是 ...
- 最短路径之迪杰斯特拉算法(Java)
1)Dijkstra算法适用于求图中两节点之间最短路径 2)Dijkstra算法设计比较巧妙的是:在求源节点到终结点自底向上的过程中,源节点到某一节点之间最短路径的确定上(这也是我之前苦于没有解决的地 ...
- [从今天开始修炼数据结构]图的最短路径 —— 迪杰斯特拉算法和弗洛伊德算法的详解与Java实现
在网图和非网图中,最短路径的含义不同.非网图中边上没有权值,所谓的最短路径,其实就是两顶点之间经过的边数最少的路径:而对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,我们称路径上第 ...
- HDU6166-Senior Pan-Dijkstra迪杰斯特拉算法(添加超源点,超汇点)+二进制划分集合-2017多校Team09
学长好久之前讲的,本来好久好久之前就要写题解的,一直都没写,懒死_(:з」∠)_ Senior Pan Time Limit: 12000/6000 MS (Java/Others) Memor ...
- OpenJ_POJ C16G Challenge Your Template 迪杰斯特拉
Challenge Your Template 题目连接: http://acm.hust.edu.cn/vjudge/contest/122701#problem/G Description ACM ...
- hdoj-2066-一个人的旅行(迪杰斯特拉)
一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
随机推荐
- java 12-5 StringBuffer的几个案例
1. 把数组拼接成一个字符串 public class StringBufferTest2 { public static void main(String[] args) { //定义一个数组 in ...
- window.lacation.replace
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- Linux 进程与线程一(创建-关闭线程)
进程是一个实体.每一个进程都有他自己的内存地址段(heap,stack等等) 进程是执行中的程序. 程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体. 进程是操作系统中最基 ...
- PHP基础14:$_REQUEST
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Linux常用指令---快捷键
Linux下快捷键使用 Ctrl + a 切换到命令行开始 这个操作跟Home实现的结果一样的,但Home在某些unix环境下无法使用,便可以使用这个组合:在Linux下的vim,这个也是有效的:另外 ...
- Java 的 JSON 开源类库选择比较(zz)
在看了作者的介绍,然后我又到mvnrepository上去看了各个库的的使用数之后,发现只能在jackson和gson之间做选择. 以下是原文 有效选择七个关于Java的JSON开源类库 April ...
- 《信息安全系统设计基础》第一次实验报告--Linux 基础入门
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全设计基础 班级:1352 姓名:何伟钦 学号:20135223 成绩: 指导教师:娄嘉鹏 ...
- TPLINK GPL code 简要分析
从TPLINK官网下载了GPL code,下载后文件名是wr841nv9_en_gpl.tar.gz, 但是无论是linux还是windows下解压都提示压缩包有问题,不过还是可以解压出完整的目录的. ...
- .NET跨平台之OWEN中 过滤器的使用
.NET中依赖IIS,通俗的说就是依赖IIS的程序集,导致我们的.NET项目就算是MONO到TOMCAT上,也无法使用,所以OWEN横空出世,OWEN定义了一套接口,接口定义了做.NET项目要实现的一 ...
- 【转】十分详细的xStream解析
转自博文:http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html xStream框架 xStream可以轻易的将Java对象和xml文 ...