I am trying to calculate the total cost of the shortest path for a flight itinerary system, but it seems to be calculate the number of paths it take instead of the length/cost. I am unable to workout how to get the cost for each journey from the Flight_Info
object.
Here is my code:
import java.util.Scanner;
import org.jgrapht.graph.*;
import org.jgrapht.Graphs;
import org.jgrapht.alg.DijkstraShortestPath;
public class Flights2 {
public static SimpleDirectedWeightedGraph<String, Flight_Info> createGraph() {
SimpleDirectedWeightedGraph<String, Flight_Info> airport = new SimpleDirectedWeightedGraph<String, Flight_Info>(
Flight_Info.class);
String Edinburgh = new String("Edinburgh");
String Heathrow = new String("Heathrow");
String Dubai = new String("Dubai");
String Sydney = new String("Sydney");
String KualaLumpur = new String("Kuala Lumpur");
String Frankfurt = new String("Frankfurt");
String Aukland = new String("Aukland");
String RioDeJanerio = new String("Rio De Janerio");
String NewYork = new String("New York");
String Santiago = new String("Santiago");
airport.addVertex(Edinburgh);
airport.addVertex(Heathrow);
airport.addVertex(Dubai);
airport.addVertex(Sydney);
airport.addVertex(KualaLumpur);
airport.addVertex(Frankfurt);
airport.addVertex(Aukland);
airport.addVertex(RioDeJanerio);
airport.addVertex(NewYork);
airport.addVertex(Santiago);
Flight_Info FL1001 = new Flight_Info("FL1001", 1530, 1630, 1, 80);
airport.addEdge(Edinburgh, Heathrow, FL1001);
Flight_Info FL1002 = new Flight_Info("FL1002", 1630, 1730, 1, 80);
airport.addEdge(Heathrow, Edinburgh, FL1002);
Flight_Info FL1003 = new Flight_Info("FL1003", 1630, 1730, 1, 80);
airport.addEdge(Heathrow, Dubai, FL1003);
Flight_Info FL1004 = new Flight_Info("FL1004", 1630, 1730, 1, 80);
airport.addEdge(Dubai, Heathrow, FL1004);
Flight_Info FL1005 = new Flight_Info("FL1005", 1630, 1730, 1, 80);
airport.addEdge(Heathrow, Sydney, FL1005);
Flight_Info FL1006 = new Flight_Info("FL1006", 1630, 1730, 1, 80);
airport.addEdge(Sydney, Heathrow, FL1006);
Flight_Info FL1007 = new Flight_Info("FL1007", 1630, 1730, 1, 80);
airport.addEdge(Dubai, KualaLumpur, FL1007);
Flight_Info FL1008 = new Flight_Info("FL1008", 1630, 1730, 1, 80);
airport.addEdge(KualaLumpur, Dubai, FL1008);
Flight_Info FL1009 = new Flight_Info("FL1009", 1630, 1730, 1, 80);
airport.addEdge(Dubai, Edinburgh, FL1009);
Flight_Info FL1010 = new Flight_Info("FL10010", 1630, 1730, 1, 80);
airport.addEdge(Edinburgh, Dubai, FL1010);
Flight_Info FL1011 = new Flight_Info("FL1011", 1630, 1730, 1, 80);
airport.addEdge(KualaLumpur, Sydney, FL1011);
Flight_Info FL1012 = new Flight_Info("FL1012", 1630, 1730, 1, 80);
airport.addEdge(Sydney, KualaLumpur, FL1012);
Flight_Info FL1013 = new Flight_Info("FL1013", 1630, 1730, 1, 80);
airport.addEdge(Edinburgh, Frankfurt, FL1013);
Flight_Info FL1014 = new Flight_Info("FL1014", 1630, 1730, 1, 80);
airport.addEdge(Frankfurt, Edinburgh, FL1014);
Flight_Info FL1015 = new Flight_Info("FL1015", 1630, 1730, 1, 80);
airport.addEdge(Sydney, Aukland, FL1015);
Flight_Info FL1016 = new Flight_Info("FL1016", 1630, 1730, 1, 80);
airport.addEdge(Aukland, Sydney, FL1016);
Flight_Info FL1017 = new Flight_Info("FL1017", 1630, 1730, 1, 80);
airport.addEdge(RioDeJanerio, NewYork, FL1017);
Flight_Info FL1018 = new Flight_Info("FL1018", 1630, 1730, 1, 80);
airport.addEdge(NewYork, RioDeJanerio, FL1018);
Flight_Info FL1019 = new Flight_Info("FL1019", 1630, 1730, 1, 80);
airport.addEdge(Santiago, NewYork, FL1019);
Flight_Info FL1020 = new Flight_Info("FL1020", 1630, 1730, 1, 80);
airport.addEdge(NewYork, Santiago, FL1020);
return airport;
}
public static void itinerary(SimpleDirectedWeightedGraph<String, Flight_Info> airport, String departure,
String destination) {
DijkstraShortestPath<String, Flight_Info> p = new DijkstraShortestPath<String, Flight_Info>(airport, departure,
destination);
System.out.println(p.getPathEdgeList());
System.out.println("Cost of shortest (i.e cheapest) path = £" + p.getPathLength() );
}
public static void main(String args[]) {
SimpleDirectedWeightedGraph<String, Flight_Info> airport = createGraph();
System.out.println("The following airports are in use:" + airport.vertexSet());
@SuppressWarnings("resource")
Scanner s = new Scanner(System.in);
System.out.println("Please enter the starting airport:");
String departure = s.nextLine();
System.out.println("Please enter the destination aiport:");
String destination = s.nextLine();
itinerary(airport, departure, destination);
}
import org.jgrapht.graph.DefaultWeightedEdge;
public class Flight_Info extends DefaultWeightedEdge {
private String departure, destination, flightNumber;
private int departureTime, arrivalTime, duration, ticketPrice;
public Flight_Info() {
}
public Flight_Info(String flightNumber, int departureTime, int arrivalTime, int duration, int ticketPrice) {
super();
this.flightNumber = flightNumber;
this.departureTime = departureTime;
this.arrivalTime = arrivalTime;
this.duration = duration;
this.ticketPrice = ticketPrice;
}
public int getDuration(){
return duration;
}
I'm only guessing, but it seems that your Flight_Info class lacks a getter for the ticket price. Then you're reading the cost of the computed shortest path in edges. I think it would be better to iterate over the edges of the shortest path and sum up the ticket prices.
As I said: Just guessing after a short look... =)
Best regards
Alex