迪杰斯特拉(Dijkstra)(详细讲解+Java源码)
迪杰斯特拉算法兼具动态规划和贪心思想
贪心思想
例: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)
综上所述,我们解题的思路为:
- 先计算A到各节点的距离,找出没有访问过的最小的那个点,并标记为访问过(因为此时该点的距离一定是最小的了)
- 更新没有访问过的其他节点的距离,更新规则为: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源码)相关推荐
- 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)
目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...
- java实现迪杰斯特拉(Dijkstra)算法求解最短路问题
迪杰斯特拉(Dijkstra)算法是由荷兰计算机科学家狄克斯特拉于1959年提出的.是寻找从一个顶点到其余各顶点的最短路径算法,可用来解决最短路径问题. 迪杰斯特拉算法采用贪心算法的策略,将所有顶点分 ...
- java数据结构和算法——迪杰斯特拉(Dijkstra)算法
目录 一.迪杰斯特拉(Dijkstra)算法介绍 二.迪杰斯特拉(Dijkstra)算法过程 三.迪杰斯特拉(Dijkstra)算法--应用场景(最短路径问题) 四.迪杰斯特拉(Dijkstra)算法 ...
- Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法
1.Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法 1.1 迪杰斯特拉(Dijkstra)算法 1.1.1 迪杰斯特拉(Dijkstra)算法介绍 迪杰斯特拉(Dijkstra ...
- 059.迪杰斯特拉(Dijkstra)算法的原理以及解决最短路径问题
1. 迪杰斯特拉(Dijkstra)算法的原理 1.1. 算法应用场景-最短路径问题 1.2. 基本介绍 1.3. 步骤详解 1.4. 思路解析 1.5. 图解步骤 2. 迪杰斯特拉(Dijkstra ...
- 迪杰斯特拉(Dijkstra)算法解决最短路径问题
Dijkstra 算法介绍 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.迪杰斯特拉(Dijkstra)算法是最经典的最短路径算法之一,用 ...
- c语言迪杰斯特拉算法求最短路径,迪杰斯特拉 ( Dijkstra ) 最短路径算法
迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径.它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本 ...
- 最短路径算法-迪杰斯特拉(Dijkstra)算法
最短路径算法-迪杰斯特拉(Dijkstra)算法 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先遍历思 ...
- 数据结构——图——迪杰斯特拉(Dijkstra )算法
数据结构--图--迪杰斯特拉(Dijkstra )算法 这是一个按路径长度递增的次序产生最短路径的算法.它的思路大体是这样的. 比如说要求图7-7-3中顶点v0到顶点v1的最短距离,没有比这更简单的了 ...
最新文章
- 鹰式价差matlab,震荡市场中的蝶式价差交易
- 2008至今,Chrome如何成长为霸主
- package.json和package-lock.json的区别
- Sequence(BZOJ-1345)
- Custom Depth in Unreal Engine 4
- android viewpager fragment 生命周期,ViewPager中Fragment的生命周期
- 题库:queryset数据类型的特性
- IT职场人生系列之三:第一份工作
- FireEye红队失窃工具大揭秘之:分析复现Zoho ManageEngine RCE (CVE-2020-10189)
- 如何“加密”你的email地址
- Hbase 详细介绍以及简单的Hbase命令操作(入门必备)
- 如何写好一篇博客(文章)
- matlab 图片数字化,基于MATLAB的尾流图像数字化处理
- 使用mbw测试内存带宽性能
- 实现1.1、1.1.1的多级编号文档排版
- Wincc报表案例_设备运行报表
- 用计算机弹c哩c哩数字,C哩C哩 - 在线打字测试(dazi.kukuw.com)
- 你对前端开发岗的看法
- The Tenth Of Word-Day
- 【卷指南】科研工作团队协作避坑指南
热门文章
- 导入地址excel,抓取相应地区的经纬度
- 消息总线c语言,消息队列与消息总线 - 有什么区别?
- UI框架 Vant、ElementUI、WeUI、AUI、LayUI
- 『OCR_recognition』CTC loss几种解码方式
- 常见的几种国内外数控系统,你都熟悉吗?
- (毕业设计资料)基于51单片机的FM数字收音机系统电路设计
- Excel实现双Y轴折线图(四条折线中有两个主轴两个副轴)
- C语言单元测试工具check
- i.mx6 android4.4.3 recovery时不删除内部SD卡上的导航地图和媒体文件等
- 计算机安全与防病毒知识,计算机安全与防病毒知识