Dijkstra算法---单源最短路径
2018-01-30 17:02
274 查看
package com.xjj.Ah; /*-------Dijkstra算法---单源最短路径----- * --求最短路径-----如果两点间的直接距离 > 引入第三点间的间接距离 * * 1.一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径” * 2.已知最短路程的顶点集合P,未知最短路径的顶点集合Q * 3.通过“边”来--松弛--基顶点到其余各个顶点的路程 * * 4.dis数组中所有的值都已经从“估计值”变为了“确定值”, book[]标记该点是否已经找到最小值(如集合P) * * 5.0代表第一个节点,不能解决带负权边 * 6.贪心思想,局部最优解 * * 7.此为邻接矩阵实现 * */ public class Dijkstra1 { static int Inf = Integer.MAX_VALUE; public static int[] method(int[][] a){ int n = a.length, min, u = 0; //记录已知最短顶点P int[] book = new int ; //记录起始基点到各顶点的距离,估计值->确定值 int[] dis = new int ; //对已知P初始化,如果book[i]==1则表示这个顶点在集合P中, //如果book[i]==0则表示这个顶点在集合Q中 ; for(int i = 0; i < n; i++) book[i] = 0; book[0] = 1; //起始基点 //起始基点到各顶点的距离 = 原数组第一行数 for(int i = 0; i < n; i++) dis[i] = a[0][i]; System.out.print("加入P集合的顶点顺序为: 0 "); //Dijkstra算法核心 //更新基点 for(int t = 1; t < n; t++){ //每次将最小值大化 min = Inf; //在所有顶点中找到到基点的最短距离; dis[i] < Inf: 说明能到达 for (int i = 1; i < n; i++) if (book[i] == 0 && dis[i] < min) { min = dis[i]; u = i; } System.out.print(u + " "); //将其加入到P集合中,标记该基点已经找到最小值 book[u] = 1; //将其换为基点,到其他顶点的距离 for (int v = 0; v < n; v++) if (a[u][v] < Inf) { //如果两点间的直接距离 > 引入第三点间的间接距离 if (dis[v] > dis[u] + a[u][v]) { dis[v] = dis[u] + a[u][v]; } } } return dis; } public static void main(String[] args) { int[][] a = {{0,1,12,Inf,Inf,Inf},{Inf,0,9,3,Inf,Inf},{Inf,Inf,0,Inf,5,Inf}, {Inf,Inf,4,0,13,15},{Inf,Inf,Inf,Inf,0,4},{Inf,Inf,Inf,Inf,Inf,0}}; int[] b = method(a); System.out.println(); System.out.print("0顶点到其他顶点的最小距离: "); for (int i : b) { System.out.print(i + " "); } } }
相关文章推荐
- Dijkstra算法实现单源最短路径
- Dijkstra算法|单源最短路径|贪心算法
- dijkstra算法计算单源最短路径
- Dijkstra算法(求单源最短路径)
- 数据结构与算法12:单源最短路径Dijkstra算法
- (1.2.6.5)单源最短路径--Dijkstra算法
- [数据结构]Dijkstra算法求单源最短路径
- Dijkstra算法(单源最短路径)
- SPFA算法与dijkstra算法求单源最短路径的比较
- Dijkstra算法(单源最短路径)C#版
- 单源最短路径 dijkstra算法
- POJ1062 昂贵的聘礼 单源最短路径变形 dijkstra算法
- 单源最短路径问题(Dijkstra算法)第五集
- 【转】Dijkstra算法(单源最短路径)
- dijkstra算法,单源最短路径算法,含记录路径
- 最短路径问题-----单源Dijkstra算法()
- 单源最短路径问题——Dijkstra算法
- 求图的邻接表表示法的单源最短路径 Dijkstra算法
- 算法——单源最短路径:Bellman-Ford算法、Dijkstra算法
- C语言基本数据结构之三(图的广度及深度遍历,求单源最短路径的Dijkstra算法)