繁体   English   中英

Dijkstra的最短路径算法不会返回权重最小的最短路径

[英]Dijkstra's Shortest Path algorithm not returning shortest path with smallest weight

我正在使用一个名为JGraphT的图形库,在我的程序中,我通过一个边将几个顶点连接在一起,而这又增加了旅行成本。

在我仅加权整数的一个示例中,它起作用了! 但是,当我将其更改为使用我的类FlightData作为权重时,它不起作用。

这是我的代码,权重仅为整数:

List<DefaultWeightedEdge> path = DijkstraShortestPath.findPathBetween(graph, start, end);
    for(int i = 0; i < path.size(); i++) {
        DefaultWeightedEdge edge = path.get(i);
        System.out.println((i+1) + " " + graph.getEdgeSource(edge) + " -> " + graph.getEdgeTarget(edge));
    }

这是我作为FlightData类的重量代码:

List<FlightData> path = DijkstraShortestPath.findPathBetween(graph, start, end);    
for(int i = 0; i < path.size(); i++) {
        FlightData f = path.get(i);
    System.out.println((i+1) + " " + graph.getEdgeSource(f) + " -> " + graph.getEdgeTarget(f));
}

我的FlightData类只是具有访问器方法的类:

import org.jgrapht.graph.DefaultWeightedEdge;

public class FlightData extends DefaultWeightedEdge
{
    private String flightNumber, depTime, arrTime;
    private double price;

    public FlightData(String flightNumber, String depTime,
            String arrTime, double price) {
        this.flightNumber = flightNumber;
        this.depTime = depTime;
        this.arrTime = arrTime;
        this.price = price;
    }

    public String getFlightNumber() {
        return flightNumber;
    }
    public String getDepartureTime() {
        return depTime;
    }
    public String getArrivalTime() {
        return arrTime;
    }
    public double getFlightPrice() {
        return price;
    }
}

谁能为我指出正确的方向,为什么一个人显示出权重最低的最短路径,而另一个人则显示出权重最低且不一定是最低的路径? (如果两个顶点之间存在直接路径,它将返回该路径!)

您需要在FlightData覆盖DefaultWeightedEdge.getWeight() ,例如,要返回price

@Override
protected double getWeight() {
  return price;
}

否则,您将使用默认的边缘权重1.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM