Dijkstra算法的java实现
来源:互联网 发布:免费办公用品软件系统 编辑:程序博客网 时间:2024/06/11 01:05
Dijkstra算法:用于单源最短路径的求解。用于计算给定的一个源节点到其他各个节点之间的最短路径。
该算法的思路是:已选定的节点集为A,待选的节点集为B。开始时节点A中仅包含源节点。
选择B中距离源节点最近的一个点,然后将它加入到节点集A中。该点加入后,更新B中所有节点到A的路径长度(借助刚加入的点)。之后重复这一步骤,直至所有点都加入。
以下图为例,做一个说明:
Dijkstra具体的java实现为:
package com.blyang;public class Dijkstra {private final int INF = Integer.MAX_VALUE;int[][] Matrix;char[] Nodes;public Dijkstra(char[] Nodes, int[][] Matrix){this.Nodes = Nodes;this.Matrix = Matrix;}/** * dijkstra算法 * * 参数说明: * @param node 起点 * @param distance 长度数组,distance[i]表示从起点到i点的最短路径 */public void dijkstra(int node, int[] distance){boolean[] flag = new boolean[Nodes.length];//初始化for(int i=0; i<Nodes.length; i++){flag[i] = false;distance[i] = Matrix[node][i];}//对顶点node本身进行初始化flag[node] = true;distance[node] = 0;//遍历Nodes.length - 1次,每次找出一个顶点点最短路径int k = 0;for(int i=1; i<Nodes.length; i++){int min = INF;//寻找最短路径for(int j=0; j<Nodes.length; j++){if(flag[j] == false && distance[j] < min){k = j;min = distance[j];}}flag[k] = true;//更新Matrix点值for(int j=0; j<Nodes.length; j++){int len = Matrix[k][j] == INF ? INF : min + Matrix[k][j];if(flag[j] == false && len < distance[j]){distance[j] = len;}}}System.out.printf("Dijkstra(%c): \n", Nodes[node]);for (int i=0; i < Nodes.length; i++) System.out.printf(" shortest(%c, %c)=%d\n", Nodes[node], Nodes[i], distance[i]);}}
在实现了之后,针对上图的测试代码如下:
package com.blyang;public class Main {public static void main(String[] args) {int INF = Integer.MAX_VALUE;char[] Nodes = {'0', '1', '2', '3'}; int matrix[][] = { /*A*//*B*//*C*//*D*/ /*A*/ { 0, 1, 2, 1}, /*B*/ { INF, 0, INF, INF}, /*C*/ { INF, 3, 0, 1}, /*D*/ { INF, 1, 1, 0}, }; int[] dist = new int[Nodes.length]; Dijkstra dijkstra = new Dijkstra(Nodes, matrix); dijkstra.dijkstra(2, dist);}}
0 0
- Dijkstra算法的Java实现
- Dijkstra算法的Java实现
- Dijkstra算法的java实现
- dijkstra算法的java实现
- dijkstra 算法的java实现
- Dijkstra算法的java实现
- Dijkstra算法的 java 实现
- Dijkstra算法 ---java实现
- dijkstra算法JAVA实现
- Java实现Dijkstra算法
- DIJKSTRA算法-java实现
- Dijkstra算法Java实现
- Dijkstra算法java实现
- Dijkstra算法java实现
- dijkstra算法java实现
- Dijkstra 算法 Java实现
- dijkstra算法JAVA实现
- Dijkstra算法JAVA实现
- 【JQuery】sele1,sele2,seleN选择器
- A星算法
- [JS插件] wScratchPad.js刮刮卡效果-页面涂抹消失插件
- 30天入门 Android 开发, Google 与你一起圆梦
- 虚拟现实
- Dijkstra算法的java实现
- ACM第一次练习—1005F
- POJ 1703
- Daemon线程和Join线程
- 批处理 选项语法
- PhotoView ImageView缩放
- XSS攻击及防御
- 排序之快速排序算法
- 【PA2014Final】【BZOJ3726】Wykladzina