gpt4 book ai didi

java - Dijkstra 的最短路径算法不返回具有最小权重的最短路径

转载 作者:行者123 更新时间:2023-12-01 16:55:25 25 4
gpt4 key购买 nike

我正在使用一个名为 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(),例如返回价格:

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

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

关于java - Dijkstra 的最短路径算法不返回具有最小权重的最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33609682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com