目录
算法介绍
应用实例
算法步骤
代码实现
算法介绍
迪杰斯特拉( Dijkstra )算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。
应用实例

算法步骤
1)设置出发顶点为 v ,顶点集合 VfvI ,v2, vi .), v 到 V 各顶点的距离构成距离集合 Dis , Dis ( dI ,d2, di .), Dis 集合记录着 v 到图中各顶点的距离(到自身可以看作0, v 到 vi 距离对应为 di )
2)从 Dis 中选择值最小的 di 并移出 Dis 集合,同时移出 V 集合中对应的项点 vi ,此时的 v 到 vi 即为最短路径
3)更新 Dis 集合,更新规则为:比较 v 到 V 集合中顶点的距离值,与 v 通过 vi 到 V 集合中顶点的距离值,保留
值较小的一个(同时也应该更新顶点的前驱节点为 vi ,表明是通过 vi 到达的)
4)重复执行两步骤,直到最短路径顶点为目标顶点即可结束。
代码实现
import java.util.Arrays;
public class _最短路{
static int[] vis;
static int[] dis;
static int[] pre;
static char[] vertex;
static int[][] matrix;
public static void main(String[] args) {
vertex= new char[]{'A','B','C','D','E','F','G'};
matrix = new int[vertex.length][vertex.length];
chushihua(matrix);
djstl(vertex.length,6);
}
public static void djstl(int length,int start) {
vis=new int[length];
dis=new int[length];
pre=new int[length];
Arrays.fill(dis, 9999);
dis[start] = 0;
update(start);
for (int i = 1; i < vertex.length; i++) {
int minIndex = -1;
int mindis=9999;
for (int j = 0; j < vertex.length; j++) {
if(vis[j]==0 && dis[j] < mindis) {
minIndex = j;
mindis = dis[j];
}
}
vis[minIndex] = 1;
update(minIndex);
}
System.out.println(Arrays.toString(dis));
}
public static void update(int index) {
vis[index] = 1;
int len= 0;
for (int i = 0; i < matrix[index].length; i++) {
len = dis[index] + matrix[index][i];
if(vis[i] == 0 && len < dis[i]) {
dis[i] = len;
pre[i] = index;
}
}
}
public static void chushihua(int[][] matrix) {
final int N = 9999;
matrix[0]=new int[]{N,5,7,N,N,N,2};
matrix[1]=new int[]{5,N,N,9,N,N,3};
matrix[2]=new int[]{7,N,N,N,8,N,N};
matrix[3]=new int[]{N,9,N,N,N,4,N};
matrix[4]=new int[]{N,N,8,N,N,5,4};
matrix[5]=new int[]{N,N,N,4,5,N,6};
matrix[6]=new int[]{2,3,N,N,4,6,N};
}
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
评论(0)