Java基础语法:Dijkstra算法

Dijkstra算法是一种解决单源最短路径问题的贪心策略,它逐步扩展最短路径,从源点开始,逐步找到到所有顶点的最短路径。在给定的Java代码中,算法通过维护一个未访问顶点集合,不断找到与已访问顶点集合相邻的、具有最短路径的顶点,并更新最短路径信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、算法简介

        Dijkstra算法是解决单源最短路径问题的贪心算法, 它先求出长度最短的一条路径,再参照该最短路径求出长度次短的一条路径 直到求出从源点到其他各个顶点的最短路径。

2、算法基本思想

        首先假定源点为u,顶点集合V被划分为两部分:集合 S 和 V-S。    初始时S中仅含有源点u,其中S中的顶点到源点的最短路径已经确定。集合S 和V-S中所包含的顶点到源点的最短路径的长度待定,称从源点出发只经过S中的点到达V-S中的点的路径为特殊路径,并用dist[]记录当前每个顶点对应的最短特殊路径长度。

3、代码

public static int[] dijkstra(int[][] distance,int origin,int n) {
    //定义算法需要的中间变量
    boolean[] used = new boolean[n];//使用标记
    int[] minDis = new int[n];//最短路径
    int maxValue = Integer.MAX_VALUE;//Java中定义的最大值
    int pathIndex = origin - 1;//与源点距离最近的点
    for (int i = 0; i < used.length; i++) {
        used[i] = false;
        //System.out.println(used[i]);
    }

    for (int i = 0; i < n; i++) {
        minDis[i] = distance[origin - 1][i];
    }
    used[origin - 1] = true;

    for (int i = 1; i < n; i++) {
        int min = maxValue;
        for (int j = 0; j < n; j++) {
            if (!used[j] && minDis[j] < min) {
                min = minDis[j];
                pathIndex = j;
            }
        }
        used[pathIndex] = true;
        for (int k = 0; k < n; k++) {
            if (distance[pathIndex][k] < maxValue) {
                if (minDis[pathIndex] + distance[pathIndex][k] < minDis[k]) {
                    minDis[k] = minDis[pathIndex] + distance[pathIndex][k];
                }
            }
        }
    }
    return minDis;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值