一.简介

迪克斯特拉算法又名Dijkstra算法(属于贪心算法)。Dijkstra算法是从一节点到其余各节点最短路径计算方法。

迪杰斯特拉算法以起始点为中心向外层层扩展,直到扩展到终点为止。

算法思想:
1.设S集合表示开始节点到其余节点的最短路径,U集合表示还未加入S集合的开始节点到其余各节点的距离(没有与开始节点直接连通的节点表示为无穷大),初始时S集合只有开始节点一个,其自身到自身距离设为0

2.设L(s,u)表示开始节点s到节点u的最短路径,从U集合选择离开始节点s最短的一个节点加入S集合,并更新U集合中开始节点到其余节点的路径min(L(s,u),L(s,k)+L(k,u))

二.实现


package com.vincent;import java.util.*;public class Main {public static void main(String[] args) throws Exception {char[] datas = {'a','b','c','d','e','f'};int[][] graph = new int[datas.length][];final int M = Integer.MAX_VALUE;//M表示节点之间没有直接连通graph[0] = new int[]{0,2,3,M,M,5};graph[1] = new int[]{2,M,M,4,M,M};graph[2] = new int[]{3,M,M,M,5,M};graph[3] = new int[]{M,4,M,M,M,6};graph[4] = new int[]{M,M,5,M,M,8};graph[5] = new int[]{5,M,M,6,8,M};for(int i=0;i<datas.length;i++){System.out.println(Arrays.toString(graph[i]));}System.out.println();System.out.println(Arrays.toString(dijkstra(graph,datas,5)));}/***迪杰斯特拉算法* @param graph         图的邻接矩阵* @param datas         节点值* @param from          开始节点索引* @return*/public static int[] dijkstra(int[][] graph,char[] datas,int from){//记录访问过的节点int[] book = new int[datas.length];//dis[i] 表示开始节点到i节点的最短路径int[] dis = new int[datas.length];book[from] = 1;dis[from] = 0;//n个节点的图,还需要加入n-1个节点for(int i=1;i<datas.length;i++){int minDis = Integer.MAX_VALUE;int minIndex = -1;//计算开始节点到未计算节点的最小路径for(int j=0;j<datas.length;j++){if(book[j] == 0 && graph[from][j] <= minDis){minDis = graph[from][j];minIndex = j;}}book[minIndex] = 1;dis[minIndex] = minDis;//更新开始节点到未计算节点的最短路径for(int j=0;j<datas.length;j++){//设L(v,u)表示v节点到u节点的路径,则L(v,k) L(k,u) 也是从v节点到u节点的路径//防止计算移除变成负数int lenDis = graph[minIndex][j] == Integer.MAX_VALUE ? Integer.MAX_VALUE : dis[minIndex] + graph[minIndex][j];if(lenDis < graph[from][j]){graph[from][j] = lenDis;}}}return dis;}
}

效果:

三.总结

Dijkstra算法属于贪心算法/BFS算法,其时间复杂度为O(n ^ 2)

Dijkstra(迪杰斯特拉)算法相关推荐

  1. JavaScript实现dijkstra迪杰斯特拉算法(附完整源码)

    JavaScript实现dijkstra迪杰斯特拉算法 PriorityQueue完整源代码 MinHeap.js完整源代码 Heap.js完整源代码 Comparator.js完整源代码 dijks ...

  2. C++实现Dijkstra(迪杰斯特拉)算法(附完整源码)

    C++Dijkstra迪杰斯特拉算法的实现 C++Dijkstra(迪杰斯特拉)算法的完整源码(定义,实现,main函数测试) C++Dijkstra(迪杰斯特拉)算法的完整源码(定义,实现,main ...

  3. Dijkstra迪杰斯特拉算法 C++实现

    本篇文章主要介绍了Dijkstra迪杰斯特拉算法的C++实现,文章包含两个部分,在第一部分中我会简单介绍迪杰斯特拉算法以及一些个人的理解,第二部分会对C++代码的逻辑进行解释.下面是我已经上传的代码资 ...

  4. Dijkstra(迪杰斯特拉)算法求单源最短路径问题

    Dijkstra(迪杰斯特拉)算法求单源最短路径问题 重要的事情说三遍:代码不是我写的!代码不是我写的!代码不是我写的! 第一个算法是严蔚敏数据结构(C语言版)上写的,第二个算法是王道数据结构上写的, ...

  5. 最短路径之Dijkstra(迪杰斯特拉)算法(无向图)

    简介      Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.由for循环可知,其时间 ...

  6. MATLAB轻松绘制地图路线——Dijkstra(迪杰斯特拉)算法最短路径规划

    文章目录 1. 地图绘制 2. 计算各节点之间的距离 3. Dijkstra(迪杰斯特拉)算法 4. 根据计算出的距离利用Dijkstra(迪杰斯特拉)算法找出指定节点之间的最短路径 工程文件(可直接 ...

  7. C语言实现Dijkstra(迪杰斯特拉)算法(附完整源码)

    Dijkstra迪杰斯特拉 Graph结构体定义 迪杰斯特拉算法完整源码(定义,实现,main函数测试) Graph结构体定义 struct Graph {int vertexNum;int **ed ...

  8. dijkstra迪杰斯特拉算法(邻接表法)

    算法简易过程: 迪杰斯特拉算法(朴素) O(n^2) G={V,E} V:点集合 E:边集合 初始化时 令 S={某源点ear}, T=V-S= {其余顶点},T中顶点对应的距离(ear, Vi)值若 ...

  9. 算法提升:图的Dijkstra(迪杰斯特拉)算法

    目录 概念 思路 代码 概念 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路 ...

最新文章

  1. c语言回文串判定代码_C语言编写一个程序,判断输入的一个字符串是否是回文。...
  2. java 结构数据结构_Java 数据结构
  3. OpenCV数据类型转换:cnvertTo函数的使用
  4. python基础十一之迭代器和生成器
  5. MATLAB的GUI中给坐标轴四周加上边框
  6. node 后台文章编辑器_我如何使用Node从报纸网站上刮掉7000篇文章
  7. python查看指令的方法python -h
  8. 使用Alcatraz来管理Xcode插件
  9. flstudio插件找不到_大家都用啥插件啊
  10. 【Java】JSON转EXCEL,支持多个数组生成多个sheet、附表头替换
  11. vue 电子签名插件
  12. 大数据给交通行业带来的五大变革
  13. 语音转文字软件哪个好,这三款值得收藏
  14. 【Undertale-传说之下】-中文补丁汉化steam
  15. 伦敦备受青睐的标志性建筑——皇家阿尔伯特音乐厅
  16. Sophos XG Firewall SFOS 18.0 下载 百度网盘
  17. 浅谈阻塞/非阻塞、同步/异步——从linux read()系统调用出发
  18. 转: angularjs学习总结(~~很详细的教程)
  19. Linux下RTP编程(上)
  20. fast路由器初始密码 TP-Link、D-Link、ipTIME、Tenda/、Fast水星等路由器恢复出厂设置

热门文章

  1. 社交app如何做好验证码防护不被刷
  2. 变频器简介_变频器工作原理
  3. HUDJ 2011 多项式求和
  4. ffmpeg 捕获屏幕和采集声卡、摄像头、麦克风声音
  5. 有什么CAD迷你看图的方法?怎么查看CAD图纸?
  6. SKU逻辑 vue实现一起学习交流
  7. uni-app实战--音频小说app小程序
  8. 前端判断扫码的客户端是微信还是支付宝?
  9. 数据分析技能点-数据数据分析是什么?
  10. 情绪识别数据集汇总心电相关and申请方法详细描述 呕心沥血之作 全网唯一 AMIGOS ASCERTAIN CLAS DECAF DREAMER MANHOB-HCI MPED SWELL