Java 实现 Dijsktra 算法
来源:互联网 发布:美图秀秀软件怎样赚钱 编辑:程序博客网 时间:2024/06/09 18:49
看看书中的描述:
书中是用C++实现的,C++比较难,懂个思路就行,这里用java实现:
package graph;public class Dijkstra { private static final int MAXSIZE = 1000; private static final int INF = 1200; private static final int N = 6; public static void main(String[] args) { System.out.println("------------Dijsktra------------"); int[][] data = { {MAXSIZE, 12, MAXSIZE, 12, 5, MAXSIZE}, {MAXSIZE, MAXSIZE, 7, MAXSIZE, 4, MAXSIZE}, {MAXSIZE, MAXSIZE, MAXSIZE, MAXSIZE, MAXSIZE, 1}, {MAXSIZE, MAXSIZE, MAXSIZE, MAXSIZE, MAXSIZE, 7}, {MAXSIZE, MAXSIZE, 14, 9, MAXSIZE, 32}, {MAXSIZE, MAXSIZE, MAXSIZE, MAXSIZE, MAXSIZE, MAXSIZE}, }; int v = 1; System.out.println("打印有向图的邻接矩阵:"); for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { System.out.print(" " + data[i][j]); } System.out.println(); } System.out.println("打印原点1到其它各点的最短路径及其长度:"); toDijsktra(data, v); } private static void toDijsktra(int[][] data, int v) { //dist[]顶点到顶点的最短距离 int[] dist = new int[N]; //path[]存放上一个顶点 int[] path = new int[N]; //s[]存放已经加入到最短路径的顶点 int[] s = new int[N]; int f = v - 1; //初始化第一个顶点 for(int i = 0; i < N; i++) { dist[i] = data[f][i]; if(dist[i] != MAXSIZE) { path[i] = v; } else { path[i] = 0; } } for(int i = 0; i < N; i++) { s[i] = 0; } //将第一个顶点加入最短路径集合 s[f] = 1; //第一个顶点到第一个顶点的距离为0 dist[f] = 0; int k = 0; for(int i = 0; i < N - 1; i++) { int min = INF; //该for循环找出最短的边 for(int j = 0; j < N; j++) { if((s[j] == 0) && (dist[j] < min)) { min = dist[j]; //最短边的顶点赋给K k = j; } } //将K顶点加入最短路径集合 s[k] = 1; //更新d[]的值,保证d[j]里面的值是有第一个顶点到k顶点的最短距离 for(int j = 0; j < N; j++) { if((s[j] == 0) && (dist[j] > (dist[k] + data[k][j]))) { dist[j] = dist[k] + data[k][j]; path[j] = k + 1; } } } for(int i = 0; i < N; i++) { System.out.print(v + "到" + (i+1) + "的最短距离是"); System.out.print(dist[i]); System.out.println(); int pre = path[i]; System.out.print("路径:" + (i+1)); while(pre != 0) { System.out.print("<------" + pre); pre = path[pre-1]; } System.out.println(); System.out.println("-----------------------"); } }}
运行结果:
1 0
- Java 实现 Dijsktra 算法
- dijsktra算法
- STL 优先队列实现的DIJSKTRA算法
- Dijsktra算法原理介绍及java源码实践
- poj1125 暴力+dijsktra算法
- 单源最短路径Dijsktra算法
- 看 迪杰斯特拉(Dijsktra)算法体会
- 最短路径算法——Dijsktra(迪杰斯特拉)算法。C++实现。
- 最短路算法(Dijsktra + 优先队列)
- 最短路径(Dijsktra算法)
- Dijsktra 最短路径和堆算法
- HDU3790 最短路径问题【Dijsktra算法】
- poj1502解题报告(Dijsktra算法)
- 最短路算法(Dijsktra + 优先队列)
- HDOJ 3970 最短路径问题[Dijsktra算法的应用]
- HDOJ 1874 畅通工程续(最短路 - dijsktra算法)
- 最短路算法(Floyd、Dijsktra、Bellman-Ford、SPFA)
- 最短路算法(Floyd、Dijsktra、Bellman-Ford、SPFA)
- 403 Forbidden错误的原因和解决方法
- Java后端书架
- ♪ ♩ ♫ 海的声音(二)《三体-死神永生》
- java,动态规划,算法导论之钢条切割(O(n)时间渐进性)
- [多线程] Web 项目中,少有涉及到的一次多线程编程的经验
- Java 实现 Dijsktra 算法
- 树莓派安装Lakka打造经典小霸王游戏机
- C++类中常量定义
- SpringMVC——/和/*的区别以及原理分析
- 历届试题 九宫重排 蓝桥杯
- HTML&CSS设计与构建网站(一)
- 校园宽带客户端认证程序无法继续初始化绑定通信接口网络地址失败_解决办法
- (转)SpringMVC:提交数据遭遇基础类型和日期类型报400错误解决方法
- 简述web功能