import jdsl.graph.api.*;
import jdsl.graph.algo.IntegerDijkstraPathfinder;
import support.*;
/**
* An extension of the IntegerDijkstraPathfinder class to find
* shortest time paths between airports.
*
* @version JDSL 2
*/
public class FlightDijkstra extends IntegerDijkstraPathfinder {
private int startTime_;
/**
* Calculates the weight of an edge. In our case, the weight is the
* total time (in minutes) between the time a passenger is scheduled
* to arrive at the origin airport and the time the plane is
* scheduled to arrive at the destination airport. Note this is not
* realistic, since it doesn't take into account minimum required
* layover times.
*/
protected int weight (Edge e) {
// the flightspecs for the flight along Edge e
FlightSpecs eFS = (FlightSpecs)e.element();
int connectingTime = TimeTable.diff(eFS.departureTime(), startTime_ + distance(g_.origin(e)));
return connectingTime + eFS.flightDuration();
}
public void execute(InspectableGraph g, Vertex source, Vertex dest, int startTime) throws InvalidVertexException {
startTime_ = startTime;
super.execute(g,source,dest);
}
/* ************************************ */
/* Members not described in the lesson. */
/* ************************************ */
protected EdgeIterator incidentEdges (Vertex v) {
return g_.incidentEdges(v,EdgeDirection.OUT);
}
}