最短路径之Dijkstra算法Java实现
2018-03-19 16:45
573 查看
Dijkstra算法步骤
以下图为例,求顶点v1到其他顶点的最短路径
初始化dis数组,怎么初始化呢?v1→v1设置为0,不能直接到达的设置为无穷大,能直接到达的附权值,并且定义集合T,初始化为{v1},集合T表示已经确定最短路径的顶点,结果如下:
找出dis数组中最小的值(不包括集合T中的顶点),这里最小值为 10,所以v1→v3的最短路径就是10 ,将v3加入到集合T中,T变为{v1,v3},
随着v3加入集合T中,数组dis会怎么变化呢?v3→v4为50,那么v1→v4可以通过v3中转v1→v3→v4=10+50=60,因为60 < dis[3],所以dis[3]=60,如图:
重复步骤2,3,直到顶点全部加入到集合T中,
此题的Java代码实现
上面的集合T,在代码中用boolean[] visited表示
以下图为例,求顶点v1到其他顶点的最短路径
初始化dis数组,怎么初始化呢?v1→v1设置为0,不能直接到达的设置为无穷大,能直接到达的附权值,并且定义集合T,初始化为{v1},集合T表示已经确定最短路径的顶点,结果如下:
找出dis数组中最小的值(不包括集合T中的顶点),这里最小值为 10,所以v1→v3的最短路径就是10 ,将v3加入到集合T中,T变为{v1,v3},
随着v3加入集合T中,数组dis会怎么变化呢?v3→v4为50,那么v1→v4可以通过v3中转v1→v3→v4=10+50=60,因为60 < dis[3],所以dis[3]=60,如图:
重复步骤2,3,直到顶点全部加入到集合T中,
此题的Java代码实现
上面的集合T,在代码中用boolean[] visited表示
public class Dijkstra { public static void main(String[] args) { int[][] graph=new int[][]{{0,Integer.MAX_VALUE,10,Integer.MAX_VALUE,30,100}, {Integer.MAX_VALUE,0,5,Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE}, {Integer.MAX_VALUE,Integer.MAX_VALUE,0,50,Integer.MAX_VALUE,Integer.MAX_VALUE}, {Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX 4000 _VALUE,0,Integer.MAX_VALUE,10}, {Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE,20,0,60}, {Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE,0}}; int[] dis=new int[6]; boolean[] visited=new boolean[6]; visited[0]=true; for(int i=0;i<6;i++) dis[i]=graph[0][i]; dijkstra(graph, dis, visited); for(int i=0;i<dis.length;i++) System.out.print(dis[i]+" "); } public static void dijkstra(int[][] graph,int[] dis,boolean[] visited){ while(true){ int min=Integer.MAX_VALUE; int index=-1; for(int i=0;i<dis.length;i++){ if(visited[i]) continue; else{ if(dis[i]<min){ index=i; min=dis[i]; } } } if(index==-1) break; visited[index]=true; for(int i=0;i<graph.length;i++){ if(graph[index][i]!=Integer.MAX_VALUE){ dis[i]=dis[i]<(min+graph[index][i])?dis[i]:min+graph[index][i]; } } } } }
相关文章推荐
- 单源最短路径Dijkstra算法(java实现)
- 单源最短路径( Dijkstra算法)JAVA实现
- 单源点最短路径Dijkstra算法的JAVA实现
- 算法java实现--贪心算法--单源最短路径问题--Dijkstra算法
- 单源点最短路径Dijkstra算法的JAVA实现
- Dijkstra算法求最短距离并输出路径(Java实现)
- 基于无向图且权重单一的最短路径Dijkstra算法——JAVA实现
- Java用Dijkstra算法实现地图两点的最短路径查询(Android版)
- 最短路径算法之Dijkstra算法(java实现)
- 最短路径Dijkstra算法的JAVA实现--转载
- 最短路径算法之Dijkstra算法_Java实现
- java实现最短路径算法之Dijkstra算法
- Java实现Dijkstra算法求最短路径
- Dijkstra算法----单源最短路径的贪心算法Java具体代码实现
- 最短路径算法之Dijkstra算法(java实现)
- Dijkstra算法实现非负权值最短路径的求解(另用小根堆进行优化)
- 算法导论学习笔记(18)——单源最短路径(Dijkstra算法实现)
- 数据结构-图-Java实现:有向图 图存储(邻接矩阵),最小生成树,广度深度遍历,图的连通性,最短路径
- 题目1008:最短路径问题 java实现
- 最短路径实现(Dijkstra算法)