0

私は JGraphT と呼ばれるグラフ ライブラリを使用しています。私のプログラムでは、いくつかの頂点が移動コストの重みを持つエッジで接続されています。

整数だけで重み付けする 1 つの例では、うまくいきます。しかし、これを自分のクラス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;
    }
}

一方が最小の重みを持つ最短パスを明らかにし、もう一方が最短のパスを明らかにし、必ずしも最小の重みを持たない理由について、誰かが私を正しい方向に向けることができますか? (2 つの頂点間に直接パスがある場合は、それが返されます!)

4

1 に答える 1

5

DefaultWeightedEdge.getWeight()をオーバーライドする必要がありますFlightData。たとえば、次を返しpriceます。

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

それ以外の場合は、デフォルトのエッジ ウェイトである を使用します1.0

于 2015-11-09T13:07:33.463 に答える