- package com.xh.Dijkstra;
- //这个算法用来解决无向图中任意两点的最短路径
- public class ShortestDistanceOfTwoPoint_V5 {
- public static int dijkstra(int[][] W1, int start, int end) {
- boolean[] isLabel = new boolean[W1[0].length];// 是否标号
- int[] indexs = new int[W1[0].length];// 所有标号的点的下标集合,以标号的先后顺序进行存储,实际上是一个以数组表示的栈
- int i_count = -1;//栈的顶点
- int[] distance = W1[start].clone();// v0到各点的最短距离的初始值
- int index = start;// 从初始点开始
- int presentShortest = 0;//当前临时最短距离
- indexs[++i_count] = index;// 把已经标号的下标存入下标集中
- isLabel[index] = true;
- while (i_count<W1[0].length) {
- // 第一步:标号v0,即w[0][0]找到距离v0最近的点
- int min = Integer.MAX_VALUE;
- for (int i = 0; i < distance.length; i++) {
- if (!isLabel[i] && distance[i] != -1 && i != index) {
- // 如果到这个点有边,并且没有被标号
- if (distance[i] < min) {
- min = distance[i];
- index = i;// 把下标改为当前下标
- }
- }
- }
- if (index == end) { //已经找到当前点了,就结束程序
- break;
- }
- isLabel[index] = true;//对点进行标号
最短路径算法
最新推荐文章于 2022-02-24 17:11:57 发布