Dijkstra(迪杰斯特拉)算法
来源:互联网 发布:淘宝关键词top100 编辑:程序博客网 时间:2024/06/06 16:24
1. 算法描述
从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
2. 算法流程
①初始化dist、path、set。
②从通往当前剩余顶点的路径中选出长度最短的。
③以该顶点为中间点检测剩余顶点。
④循环至结束
例:
完整的Java代码:
package dijkstra;public class Main {int n = 7;//顶点个数int dist[] = new int[7];//当前已找到的最短路径int edges [][] = new int[7][7];//存放权值信息int path [] = new int[7];//存放至终点的上一个顶点int set[] = new int[7];//标记某顶点是否并入最短路径public static void main(String[] args) {Main main = new Main();main.init();main.dijkstra();main.myPrint();}void dijkstra(){int v = 0;//起始点为0int min,i,j,u = 0;//初始化数组for(i=0;i<dist.length;i++){dist[i] = edges[v][i];set[i] = 0;if(edges[v][i]<Integer.MAX_VALUE){path[i] = v;}else{path[i] = -1;}}set[v] = 1;path[v] = -1;for(i=0;i<7;++i){min = Integer.MAX_VALUE;//从剩余顶点中选出一个顶点,通往该顶点的路径是剩余顶点中最小的for(j=0;j<7;++j){if(set[j]==0&&dist[j]<min){u = j;min = dist[j];}}set[u] = 1;//以刚并入的顶点为中间点,对所有通往剩余顶点的路径进行检测for(j=0;j<7;j++){if(set[j]==0&&edges[u][j]!=Integer.MAX_VALUE&&dist[u]+edges[u][j]<dist[j]){dist[j] = dist[u] + edges[u][j];path[j] = u;}}}}void init(){for(int i=0;i<7;i++){for(int j=0;j<7;j++){if(i!=j){edges[i][j] = Integer.MAX_VALUE;}}}edges[0][1] = 4;edges[0][2] = 6;edges[0][3] = 6;edges[1][2] = 1;edges[1][4] = 7;edges[2][4] = 6;edges[2][5] = 4;edges[3][2] = 2;edges[3][5] = 5;edges[4][6] = 6;edges[5][4] = 1;edges[5][6] = 8;}void myPrint(){System.out.println();for(int i=0;i<7;++i){System.out.print(dist[i]+" ");}System.out.println();for(int i=0;i<7;++i){System.out.print(path[i]+" ");}System.out.println();for(int i=0;i<7;++i){System.out.print(set[i]+" ");}System.out.println();}}
备注:
①Integer.MAX_VALUE表示int所能表示的最大值0x7FFFFFFF,Java中int占4字节,一字节为8位。例:Integer.MAX_VALUE + 1 = Integer.MIN_VALUE;
0 0
- Dijkstra(迪杰斯特拉)算法
- Dijkstra(迪杰斯特拉)算法
- 迪杰斯特拉算法(Dijkstra)
- 算法复习 - Dijkstra算法(迪杰斯特拉算法)
- 图-迪杰斯特拉(dijkstra)算法
- Dijkstra(迪杰斯特拉)算法模板
- 算法学习 - Dijkstra(迪杰斯特拉)算法学习
- 迪杰斯特拉算法(Dijkstra算法)
- 迪杰斯特拉算法 Dijkstra算法
- 单源最短路径长度Dijkstra(迪杰斯特拉)算法
- 迪杰斯特拉/dijkstra 算法模板(详细注释)
- Dijkstra(迪杰斯特拉)算法-js实现
- 单源最短路经的迪杰斯特拉算法(Dijkstra)
- 迪杰斯特拉(Dijkstra)算法 Java实现
- 最短路问题 (Dijkstra 迪杰斯特拉算法)
- 单源最短路径问题-迪杰斯特拉(Dijkstra)算法
- 迪杰斯特拉算法【Dijkstra】
- Dijkstra(迪杰斯特拉)算法
- 图片选择器编写
- 滚动加载图片
- CDH安装SQOOP错误:Caused by: java.sql.SQLException: No suitable driver found for jdbc:derby:/var/lib/sqoo
- 第一次用结构体
- React-native 获取屏幕宽度/高度/像素
- Dijkstra(迪杰斯特拉)算法
- java集合概述
- POJ 3734 Blocks(矩阵快速幂)
- MD5加密的util
- Error: Your project contains C++ files but it is not using a supported native build system
- uva1352 Colored Cubes
- Codeforces 389D Fox and Minimal path【构造+二进制思维】好题!
- 百度地图在scrollview里面滑动冲突解决以及跳转到百度地图app的方法
- Linux字符设备驱动