基于迪科斯彻算法(Dijkstra's algorithm)的次短路径问题的java实现

本文介绍了如何在Dijkstra算法基础上扩展来寻找图中的次短路径。通过在找到最短路径后删除其中一条边,然后在剩余子图中重新计算最短路径,可以得到一系列次短路径。以A->H为例,当最短路径为60时,可以找出两条次短路径,分别是100和110。
摘要由CSDN通过智能技术生成

在Dijkstra算法的基础上作一些改动,可以扩展其功能。比如,可以在求得最短路径的基础上再列出一些次短的路径。做法是先在原图上计算出最短路径,然后从图中删去该路径中的某一条边,在余下的子图中重新计算最短路径。对于原最短路径中的每一条边,均可求得一条删去该边后子图的最短路径,这些路径经排序后即为原图的一系列次短路径。(出处

还是针对下图实验(视频出处),在计算出A->H的最短路径(60)后,应该可以找出2条次短路径(100和110):

代码贴在下面:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

final class Constants {
    public final static int MAX_V = 1000000000;
}

final class Station {

    public Station(final String name) {
        this.name = name;
        disSum = Constants.MAX_V;
        previous = null;
    }

    public String getName() {
        return this.name;
    }
    public int getDisSum() {
        return this.disSum;
    }
    public void setDisSum(final int disSum) {
        this.disSum = disSum;
    }
    public Station getPrevious() {
        return this.previous;
    }
    public void setPrevious(final Station previous) {
        this.previous = previous;
    }

    @Override
    public boolean equals(Object s) {
        return name.equals(((Station) s).name);
    }

    @Override
    public String toString() {
        return this.getClass().getSimpleName() + "[name=" + name + ", disSum=" + Integer.toString(disSum) + ", previous=" + (previous == null ? "null" : previous.name) + "]";
    }

    private final String name;
    private int disSum;
    private Station previous;
}

final class StationDisComparator implements Comparator<Station> {
    @Override
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值