package dijkstra;

import java.util.ArrayList;

public class Dijkstra {

    private static int N = ;
/*private static int[][] Graph = {
{ 0, 1, 5, N, N, N, N, N, N },
{ 1, 0, 3, 7, 5, N, N, N, N },
{ 5, 3, 0, N, 1, 7, N, N, N },
{ N, 7, N, 0, 2, N, 3, N, N },
{ N, 5, 1, 2, 0, 3, 6, 9, N },
{ N, N, 7, N, 3, 0, N, 5, N },
{ N, N, N, 3, 6, N, 0, 2, 7 },
{ N, N, N, N, 9, 5, 2, 0, 4 },
{ N, N, N, N, N, N, 7, 4, 0 } };*/ private static int[][] Graph = {
{ , , , N, N, , N, N, N },
{ , , N, N, N, N, , N, N },
{ , N, , , , N, N, N, N },
{ N, N, , , N, N, N, N, N },
{ N, N, , N, , N, N, , N },
{ , N, N, N, N, , N, N, N },
{ N, , N, N, N, N, , , N },
{ N, N, N, N, , N, , , },
{ N, N, N, N, N, N, N, , } };
public static void main(String[] args) {
dijkstra(, Graph,);
} /**
* Dijkstra最短路径。
* 即图中"节点vs"到其它各个节点的最短路径。
* @param vs 起始节点
* @param Graph 图
* @param ds 目的终点
* 输入vs,Graph,ds输出选出的路径
* 每次选出一个最优节点加入最短路径数组中
*/
public static void dijkstra(int vs, int[][] Graph,int ds) {
int NUM = Graph[].length;
// 前驱节点数组
int[] prenode = new int[NUM];
// 最短距离数组
int[] mindist = new int[NUM];
// 该节点是否已经找到最短路径
boolean[] find = new boolean[NUM]; int vnear = ; for (int i = ; i < mindist.length; i++) {
prenode[i] = i;
mindist[i] = Graph[vs][i];
find[i] = false;
} find[vs] = true; for (int v = ; v < Graph.length; v++) { // 每次循环求得距离vs最近的节点vnear和最短距离min
int min = N;
for (int j = ; j < Graph.length; j++) {
if (!find[j] && mindist[j] < min) {
min = mindist[j];
vnear = j;
}
}
find[vnear] = true; // 根据vnear修正vs到其他所有节点的前驱节点及距离
for (int k = ; k < Graph.length; k++) {
if (!find[k] && (min + Graph[vnear][k]) < mindist[k]) {
prenode[k] = vnear;
mindist[k] = min + Graph[vnear][k];
}
}
} for (int i = ; i < NUM; i++) {
System.out.println("v" + vs + "...v" + prenode[i] + "->v" + i + ", s=" + mindist[i]);
} int before=ds;
int b=;
String q=null;
ArrayList<String> array=new ArrayList<String>();//Java数组动态增加容量,采用ArrayList类数组,它可以在需要时自动扩容;
array.add(String.valueOf(ds));//保存经过的路径节点
while(true) {
b=prenode[before];
if(b==before) {
break;
}
before=b;
if(before==vs) {
q=String.valueOf(before);//int型强转为String类型
array.add(q);
break;
}
else {
q=String.valueOf(before);
array.add(q);
} }
array.add(String.valueOf(vs));
System.out.println(array);//输出找到的路径经过的点
}
}

Dijkstra算法依据项目改进版,输出路径的更多相关文章

  1. 如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀)

    原文:如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀) 我们都知道可以通过在 Visual Studio 中设置输出路径(OutputPath)来更改项目输 ...

  2. Eclipse如何设置编译文件.class输出路径

    1.首先我发现我的eclipse中-->project-->build automatically 是勾选上的.好吧,把把前面的勾去掉. 2去掉以后我先clean --> Clean ...

  3. 基于dijkstra算法求地铁站最短路径以及打印出所有的路径

    拓展dijkstra算法,实现利用vector存储多条路径: #include <iostream> #include <vector> #include <stack& ...

  4. PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集

    L2-001 紧急救援 (25 分)   作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...

  5. 最短路问题 Dijkstra算法- 路径还原

    // 路径还原 // 求最短路,并输出最短路径 // 在单源最短路问题中我们很容易想到,既然有许多条最短路径,那将之都存储下来即可 // 但再想一下,我们是否要把所有的最短路径都求出来呢? // 实际 ...

  6. Cmake 脚本对项目输出路径和输出头文件的路径定义

    对Lib项目的统一输出路径以下时解决方案: set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Lib)set(CMAKE_LIBRARY_O ...

  7. 山东省第七届ACM竞赛 C题 Proxy (Dijkstra算法,单源路径最短问题)

    题意:给定0-n+1个点,和m条边,让你找到一条从0到n+1的最短路,输出与0相连的结点... 析:很明显么,是Dijkstra算法,不过特殊的是要输出与0相连的边,所以我们倒着搜,也是从n+1找到0 ...

  8. Dijkstra算法(带路径模板)

    个人心得:Dijkstra算法是贪心思想的一种延伸,注意路径pre,pre数组表示此时最短路径中的前一个顶点.每次更新到目的点时更新: 从源点出发,更新路径,然后找出此时最短的点,然后以这个点为头,看 ...

  9. 【算法】Dijkstra算法(单源最短路径问题)(路径还原) 邻接矩阵和邻接表实现

    Dijkstra算法可使用的前提:不存在负圈. 负圈:负圈又称负环,就是说一个全部由负权的边组成的环,这样的话不存在最短路,因为每在环中转一圈路径总长就会边小. 算法描述: 1.找到最短距离已确定的顶 ...

随机推荐

  1. JS求1到100的累计值

    sum=0 for(i=1;i<=100;i++) { sum+=i } alert(sum)   作者:kerwin-chyl 文章链接:https:////www.cnblogs.com/k ...

  2. 写入时复制(CopyOnWrite)

    一.CopyOnWrite 思想 写入时复制(CopyOnWrite,简称COW)思想是计算机程序设计领域中的一种通用优化策略.其核心思想是,如果有多个调用者(Callers)同时访问相同的资源(如内 ...

  3. RedHat7安装NetCore环境并发布网站

    RedHat7安装NetCore环境并发布网站 1.注册Microsoft签名密钥并添加Microsoft产品提要,每台机器只需注册一次 执行下面的命令即可 rpm -Uvh https://pack ...

  4. Leetcode字典树-720:词典中最长的单词

    第一次做leetcode的题目,虽然做的是水题,但是菜鸟太菜,刚刚入门,这里记录一些基本的知识点.大佬看见请直接路过. https://leetcode-cn.com/problems/longest ...

  5. 如何实现广告响应式滚动 OwlCarousel2

    githu    https://github.com/OwlCarousel2/OwlCarousel2 OwlCarousel2 官方网址    http://owlcarousel2.githu ...

  6. c# 异步编程总结

    异步编程前提 1.学委托 delegate 其中委托中的beginInvoke()和endInvoke()方法必须要会. 2.学习回调函数 (也可以不用,但是一般建议用回调函数中执行endinvoke ...

  7. C#方法中的各类参数

    居家隔离的第26天,还在持续的疫情着实让人担忧,看着每天新增的确认人数数字,也在为那些家庭祝福,每当想想那不是一个数字是一条条鲜活的生命时就格外沉重.利用闲在家里的时间巩固C#语言的一个难点.最近在温 ...

  8. Python3标准库:queue线程安全的FIFO实现

    1. queue线程安全的FIFO实现 queue模块提供了一个适用于多线程编程的先进先出(FIFO,first-in,first-out)数据结构,可以用来在生产者和消费者线程之间安全地传递消息或其 ...

  9. Electron+Vue – 基础学习(2): 项目打包成exe桌面应用

    项目创建完成,启动正常,接下来就是项目打包了.将测试Demo打包成exe桌面应用,点击exe文件,运行项目. 书接上文,创建项目有三种方式 Git拷贝.直接创建:通过electron社群提供的命令行工 ...

  10. 极具性价比优势的工业控制以及物联网解决方案-米尔MYD-C8MMX开发板测评

    今天要进行测评的板子是来自米尔电子的MYD-C8MMX开发板.MYD-C8MMX开发板是米尔电子基于恩智浦,i.MX 8M Mini系列嵌入式应用处理器设计的开发套件,具有超强性能.工业级应用.10年 ...