算法实现Java之最短路径迪杰斯特拉(Dijkstra)

来源:互联网 发布:英雄联盟韩服数据库 编辑:程序博客网 时间:2024/05/29 13:42
package com.gpf.arithmetic;public class Dijkstra {private static int M=200000;//无通路public static void main(String[] args) {//初始距离int [][]weight = {{0,767,M,698,M},{343,0,M,263,512},{342,348,0,M,123},{456,234,M,0,890},{534,567,546,M,0},};int start = 0;int[]shortPath = DijkstraPath(weight, start);for(int i = 0; i < shortPath.length; i++){System.out.println(start + "到" + i + "点的最短距离为:" + shortPath[i]);}}private static int[] DijkstraPath(int[][] weight, int start) {int n = weight.length;//顶点数量int []shortPath = new int[n];//最短路径String []path = new String[n];//路径boolean [] visited = new boolean[n];//是否求出//初始化for (int i = 0; i < n; i++) {visited[i] = false;path[i] = start + "-->" + i;}//设置初始点shortPath[start] = 0;visited[start] = true;//求其他点for(int num = 0; num < n-1; num++){//找出距离start最短距离的点kint k = -1;int dmin = Integer.MAX_VALUE;for(int i = 0; i < n; i++){//距离最小且没访问过if(visited[i]==false && weight[start][i]<dmin){dmin = weight[start][i];k = i;}}//循环结束 找出该点 并标记shortPath[k] = dmin;visited[k] = true;//赋值距离for(int i = 0; i < n; i++){//没有访问过且加入k点后距离小于直接if(visited[i]==false && weight[start][k] + weight[k][i] < weight[start][i]){weight[start][i] = weight[start][k] + weight[k][i];path[i] = path[k] + "-->" + i;}}}for(int i = 0; i < n; i++){System.out.println(start + "到" + i + "的路径为:" + path[i]);}return shortPath;}}

阅读全文
0 0
原创粉丝点击