迪杰斯特拉算法兼具动态规划和贪心思想

贪心思想

例:A能到达的各点中,AC距离最小

那么无论后续怎么变化,再找任何其他路径,A到C的距离都不可能小于A->x->C,因为A->x的距离已经大于A->C了

所有我们也不用再考虑C节点了,C已经是最小距离了

动态规划思想

现在有A->B A->C A->D

如果A->C的距离是三个中最小的一个,那么A->B->C,A->D->C 都是大于A->C这是上面论述过的

但是我们无法保证A->C->B比A->B要长

因此我们要更新A->B的距离,为Math.min(A->C->B,A->B)

综上所述,我们解题的思路为:

  1. 先计算A到各节点的距离,找出没有访问过的最小的那个点,并标记为访问过(因为此时该点的距离一定是最小的了)
  2. 更新没有访问过的其他节点的距离,更新规则为:Math.min(A->C->B,A->B)

循环1,2步骤,直到所有节点都被访问
就得到了A到各节点的最短路径

Code

public class Learn {static char[] vexs = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};private static int INF=Integer.MAX_VALUE/2;public static void dijkstra(int matrix[][]) {boolean[] visited=new boolean[matrix.length];int[] dist=new int[matrix.length];visited[0]=true;int min_cur=0;int min_value;//初始化for (int i = 0; i < dist.length; i++) {dist[i]=matrix[0][i];}for (int k = 0; k <dist.length ; k++) {int temp=dist[min_cur];int temp_cur=min_cur;min_value=Integer.MAX_VALUE/2;visited[min_cur]=true;System.out.println("加入了点: "+vexs[min_cur]);for (int i = 0; i < dist.length; i++) {if(!visited[i]){dist[i]=Math.min(dist[i],temp+matrix[temp_cur][i]);if(dist[i]<min_value){min_value=dist[i];min_cur=i;}}}}System.out.println("======================");System.out.println(Arrays.toString(dist));}public static void main(String[] args) {int matrix[][] = {/*A*//*B*//*C*//*D*//*E*//*F*//*G*//*A*/ {   0,  12, INF, INF, INF,  15,  14},/*B*/ {  12,   0,  10, INF, INF,   7, INF},/*C*/ { INF,  10,   0,   3,   5,   6, INF},/*D*/ { INF, INF,   3,   0,   5, INF, INF},/*E*/ { INF, INF,   5,   5,   0,   2,   8},/*F*/ {  15,   7,   6, INF,   2,   0,   9},/*G*/ {  14, INF, INF, INF,   8,   9,   0}};dijkstra(matrix);}
}

迪杰斯特拉(Dijkstra)(详细讲解+Java源码)相关推荐

  1. 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)

    目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...

  2. java实现迪杰斯特拉(Dijkstra)算法求解最短路问题

    迪杰斯特拉(Dijkstra)算法是由荷兰计算机科学家狄克斯特拉于1959年提出的.是寻找从一个顶点到其余各顶点的最短路径算法,可用来解决最短路径问题. 迪杰斯特拉算法采用贪心算法的策略,将所有顶点分 ...

  3. java数据结构和算法——迪杰斯特拉(Dijkstra)算法

    目录 一.迪杰斯特拉(Dijkstra)算法介绍 二.迪杰斯特拉(Dijkstra)算法过程 三.迪杰斯特拉(Dijkstra)算法--应用场景(最短路径问题) 四.迪杰斯特拉(Dijkstra)算法 ...

  4. Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法

    1.Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法 1.1 迪杰斯特拉(Dijkstra)算法 1.1.1 迪杰斯特拉(Dijkstra)算法介绍 迪杰斯特拉(Dijkstra ...

  5. 059.迪杰斯特拉(Dijkstra)算法的原理以及解决最短路径问题

    1. 迪杰斯特拉(Dijkstra)算法的原理 1.1. 算法应用场景-最短路径问题 1.2. 基本介绍 1.3. 步骤详解 1.4. 思路解析 1.5. 图解步骤 2. 迪杰斯特拉(Dijkstra ...

  6. 迪杰斯特拉(Dijkstra)算法解决最短路径问题

    Dijkstra 算法介绍 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.迪杰斯特拉(Dijkstra)算法是最经典的最短路径算法之一,用 ...

  7. c语言迪杰斯特拉算法求最短路径,迪杰斯特拉 ( Dijkstra ) 最短路径算法

    迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径.它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本 ...

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

    最短路径算法-迪杰斯特拉(Dijkstra)算法 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先遍历思 ...

  9. 数据结构——图——迪杰斯特拉(Dijkstra )算法

    数据结构--图--迪杰斯特拉(Dijkstra )算法 这是一个按路径长度递增的次序产生最短路径的算法.它的思路大体是这样的. 比如说要求图7-7-3中顶点v0到顶点v1的最短距离,没有比这更简单的了 ...

最新文章

  1. 鹰式价差matlab,震荡市场中的蝶式价差交易
  2. 2008至今,Chrome如何成长为霸主
  3. package.json和package-lock.json的区别
  4. Sequence(BZOJ-1345)
  5. Custom Depth in Unreal Engine 4
  6. android viewpager fragment 生命周期,ViewPager中Fragment的生命周期
  7. 题库:queryset数据类型的特性
  8. IT职场人生系列之三:第一份工作
  9. FireEye红队失窃工具大揭秘之:分析复现Zoho ManageEngine RCE (CVE-2020-10189)
  10. 如何“加密”你的email地址
  11. Hbase 详细介绍以及简单的Hbase命令操作(入门必备)
  12. 如何写好一篇博客(文章)
  13. matlab 图片数字化,基于MATLAB的尾流图像数字化处理
  14. 使用mbw测试内存带宽性能
  15. 实现1.1、1.1.1的多级编号文档排版
  16. Wincc报表案例_设备运行报表
  17. 用计算机弹c哩c哩数字,C哩C哩 - 在线打字测试(dazi.kukuw.com)
  18. 你对前端开发岗的看法
  19. The Tenth Of Word-Day
  20. 【卷指南】科研工作团队协作避坑指南

热门文章

  1. 导入地址excel,抓取相应地区的经纬度
  2. 消息总线c语言,消息队列与消息总线 - 有什么区别?
  3. UI框架 Vant、ElementUI、WeUI、AUI、LayUI
  4. 『OCR_recognition』CTC loss几种解码方式
  5. 常见的几种国内外数控系统,你都熟悉吗?
  6. (毕业设计资料)基于51单片机的FM数字收音机系统电路设计
  7. Excel实现双Y轴折线图(四条折线中有两个主轴两个副轴)
  8. C语言单元测试工具check
  9. i.mx6 android4.4.3 recovery时不删除内部SD卡上的导航地图和媒体文件等
  10. 计算机安全与防病毒知识,计算机安全与防病毒知识