算法分析:

首先,Dijkstra算法实现上需要这些前提:

  • Dijkstra处理的是带正权值的有权图,那么就需要一个二维数组(如果空间大用List数组)存储各个点到点之间边的权值大小 (邻接矩阵或者邻接表存储) ,各个点距离初始化为无穷大。

  • 需要一个boolean数组判断哪些点已经确定最短⻓度路径,哪些点没有确定。用一个 int数组记录距离(在算法执行过程有些点最短路径可能被多次更新)。

  • 需要优先队列加入已经确定点的周围点。每次抛出从起点最短路径的那个点,直到所有点路径确定最短为止。

简单的概括流程为:

  • 第一步一般从选定点开始抛入优先队列(路径一般为0),boolean数组标记0的位置(最短为0) , 然后0周围连通的点抛入优先队列中(可能是node类),并把各个点的距离记录到对应数组内,此时周围点只是等待调度可能是最短距离,也可能被更新。(如果小于就更新,大于就不动,初始第一次是无穷肯定会更新),第一次就结束了。

  • 从等待调度队列中抛出距离最近的那个点B(第一次就是0周围邻居)。这个点距离一定是最近可以确定的(所有权值都是正的,点的距离只能越来越⻓,而它的路径是所有可能中的最小的)标记这个点为true表示已经确定,并且将这个点的邻居加入队列(下一次等待调度点为队列中原有的和这个点周围未确定的邻居),并同时判断是否更新B点邻居⻓度,如果小于则更新!

  • 重复二操作,直到所有的点都确定。

 算法实现:

package 图论;import java.util.ArrayDeque;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;public class dijkstra {static class node{int x; //节点编号int lenth;//长度public node(int x,int lenth) {this.x=x;this.lenth=lenth;}}public static void main(String[] args) {int[][] map = new int[6][6];//记录权值,顺便记录链接情况,可以考虑附加邻接表initmap(map);//初始化boolean bool[]=new boolean[6];//判断是否已经确定int len[]=new int[6];//长度for(int i=0;i<6;i++){len[i]=Integer.MAX_VALUE;}Queue<node>q1=new PriorityQueue<node>(com);len[0]=0;//从0这个点开始q1.add(new node(0, 0));int count=0;//计算执行了几次dijkstrawhile (!q1.isEmpty()) {node t1=q1.poll();int index=t1.x;//节点编号int length=t1.lenth;//节点当前点距离bool[index]=true;//抛出的点确定count++;//其实执行了6次就可以确定就不需要继续执行了  这句可有可无,有了减少计算次数for(int i=0;i<map[index].length;i++){if(map[index][i]>0&&!bool[i]){node node=new node(i, length+map[index][i]);if(len[i]>node.lenth)//需要更新节点的时候更新节点并加入队列{len[i]=node.lenth;q1.add(node);}}}}       for(int i=0;i<6;i++){System.out.println(len[i]);}}static Comparator<node>com=new Comparator<node>() {public int compare(node o1, node o2) {return o1.lenth-o2.lenth;}};private static void initmap(int[][] map) {map[0][1]=2;map[0][2]=3;map[0][3]=6;map[1][0]=2;map[1][4]=4;map[1][5]=6;map[2][0]=3;map[2][3]=2;map[3][0]=6;map[3][2]=2;map[3][4]=1;map[3][5]=3;map[4][1]=4;map[4][3]=1;map[5][1]=6;map[5][3]=3;    }
}

更详细内容,点击下方原文链接:

转自:https://blog.csdn.net/qq_40693171/article/details/119723211。

单源最短路径(dijkstra)相关推荐

  1. 分支限界法:单源最短路径--dijkstra算法

    单源最短路径–dijkstra算法 前面已经多次介绍过dijkstra算法是贪心算法,是动态规划,实际上可以从分支限界的角度来理解: 分支限界法 分支限界法,实际上就是回溯法,一般意义的回溯法是基于深 ...

  2. 数据结构----单源最短路径Dijkstra

    数据结构----单源最短路径Dijkstra 原理:参考趣学数据结构 代码: stack.h 栈代码 #pragma once #include<stdio.h> #define maxS ...

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

    迪杰斯特拉算法时间复杂度为O(n^2),其中n为顶点个数. 该算法用于求单源最短路径.并且图中的边不允许带负权值. #include <iostream> using namespace ...

  4. 数据结构与算法—单源最短路径dijkstra算法

    介绍 对于dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解bfs和dfs,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原理,又或 ...

  5. 单源最短路径dijkstra算法

    介绍 dijkstra算法也是解决单源最短路径问题的一种方法.它要求图中路径都是非负的.而且,它的效率要高于bellman算法. 实现 首先定义图的结点信息和边信息. struct _Node;typ ...

  6. NYOJ有趣的问题(单源最短路径dijkstra)

    思路:这题的难度主要是在建图上,建完图之后就是求单源最短路径问题.可用dijkstra算法.要注意他给出的墙的x坐标不是有序 的. #include<stdio.h> #include&l ...

  7. 单源顶点最短路径java_单源最短路径-Dijkstra 算法

    Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 问题:求a点到各个点的最短距离,如下图 ...

  8. JAVA编程求单源最短路径_【算法】单源最短路径——dijkstra算法

    一,概念 单源最短路径 给定一个带权有向图G=(V,E),其中每条边的权是一个实数.另外,还给定V中的一个顶点,称为源.要计算从源到其他所有各顶点的最短路径长度.这里的长度就是指路上各边权之和.这个问 ...

  9. 单源最短路径 dijkstra

    dijkstra是单源最短路径算法,要两个数组来维护需要的信息 dis[i]用来维护起始点到i点的最短距离,初始化为一个很大的数字 0x3f3f3f3f vis[i]用来维护是否访问过该点,初始化为0 ...

  10. 单源最短路径 dijkstra()

    前言 首先,单源最短路径问题(Single Source Shortest Path , SSSP 问题)是说: 给定一张有向图 G= (V,E) , V 是这个图的点集, E = 是边集 , 节点以 ...

最新文章

  1. FPGA中LUT、 LATCH 、FF
  2. iis服务器显示http1.1,IIS服务器“500”内部错误 HTTP/1.1 新建会话失败
  3. leetcode剑指 Offer 14- I. 剪绳子(动态规划)
  4. HTML5系列(2)--ol列表的新属性
  5. Linux 命令(141)—— nmap 命令
  6. c语言 word转pdf,批量Word转PDF之捷径
  7. TP-Link 886nV6 刷第三方系统回忆
  8. 用nvidia-docker跑深度学习模型
  9. android谷歌地图_Android Google地图:添加天气数据
  10. please use torch.load with map_location=torch.device(‘cpu‘) to map your storages to the CPU.
  11. 三进制 四进制计算机原理,三进制计算机(中国三进制计算机)
  12. 微信小程序中使用iconfont图标
  13. 深圳一公司在开源社区表示“要源码上门自取”,引来百万粉大V突袭公司,结果让人意外!...
  14. python工资一般多少p-我会P图,工资5000,兼职1.5w……
  15. springfox-swagger-ui 3.0.0 配置,springfox-boot-starter 配置
  16. 51单片机玩转物联网基础篇05-控制继电器
  17. 昨晚(2009-09-08),自己的第一个项目上线成功,踩个脚印
  18. 如何实现flex栅格布局及合并单元格
  19. uni-app引入自定义图标库——Iconfont-阿里巴巴
  20. Android Editable

热门文章

  1. vue 翻牌器 记录下
  2. vins-fusion gps融合相关总结
  3. WORM_DOWNAD.AD病毒清除记
  4. 根轨迹法学习过程一些收获
  5. 硬件设计知识体系梳理--目录
  6. ubuntu16.04使用USB转TTL(ch340)串口转usb调试过程
  7. 计算机网络在铁路信号中的应用,计算机网络在铁路信号中应用.doc
  8. 能打胜仗,作风优良,艰难奇妙的秋招之旅
  9. Oracle Golden Gate(OGG)学习——源端安装OGG (数据库版本为Oracle 10g)
  10. 校园随手拍之Android从相册选取图片或拍摄图片并上传(kotlin版)