Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public CursorList<RouteInfo> minCostRoute(String startName, String endName){
- // TODO: Find the route from start to end that has minimum cost
- LinkedNodeBasedList<RouteInfo> minRoute = new LinkedNodeBasedList();
- Vertex<String> start = cities.get(startName);
- Vertex<String> end = cities.get(endName);
- // If there isn't a vertex, the city doesn't exist
- for(Vertex<String> v: deliveries.vertices())
- {
- if(v.equals(start))
- {
- v.put("COST", 0.0);
- }else{
- v.put("COST", Double.MAX_VALUE);
- }
- }
- HeapPQ<Vertex<String>, Double> minCost = new HeapPQ();
- for(Vertex<String> v: deliveries.vertices())
- {
- PriorityQueueEntry I = minCost.enqueue(v, (Double)v.get("COST"));
- v.put("LOCATOR", I);
- }
- while( minCost.isEmpty() == false)
- {
- Vertex<String> v = minCost.dequeue().element();
- for(Edge<RouteInfo> e: deliveries.incidentEdges(v))
- {
- Vertex<String> opp = deliveries.opposite(v, e);
- double thruEdist = Double.parseDouble(v.get("COST").toString()) + e.element().getCost();
- if(thruEdist < (Double)opp.get("COST"))
- {
- opp.put("COST", thruEdist);
- minCost.changePriority((PriorityQueueEntry)opp.get("LOCATOR"), thruEdist);
- opp.put("EDGE", e);
- }
- }
- }
- Vertex<String> v = end;
- Edge<RouteInfo> eri = (Edge<RouteInfo>)v.get("EDGE");
- minRoute.add(eri.element());
- v = deliveries.opposite(v, eri);
- while(v != start)
- {
- eri = (Edge<RouteInfo>)v.get("EDGE");
- minRoute.addBefore(minRoute.first(), eri.element());
- v = deliveries.opposite(v, eri);
- }
- if(start==null || end== null) {
- return null;
- }
- return minRoute;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement