Advertisement
CBredlow

Djikstra

Dec 10th, 2011
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. public CursorList<RouteInfo> minCostRoute(String startName, String endName){
  2. // TODO: Find the route from start to end that has minimum cost
  3. LinkedNodeBasedList<RouteInfo> minRoute = new LinkedNodeBasedList();
  4. Vertex<String> start = cities.get(startName);
  5. Vertex<String> end = cities.get(endName);
  6. // If there isn't a vertex, the city doesn't exist
  7. for(Vertex<String> v: deliveries.vertices())
  8. {
  9. if(v.equals(start))
  10. {
  11. v.put("COST", 0.0);
  12. }else{
  13. v.put("COST", Double.MAX_VALUE);
  14. }
  15. }
  16. HeapPQ<Vertex<String>, Double> minCost = new HeapPQ();
  17. for(Vertex<String> v: deliveries.vertices())
  18. {
  19. PriorityQueueEntry I = minCost.enqueue(v, (Double)v.get("COST"));
  20. v.put("LOCATOR", I);
  21. }
  22. while( minCost.isEmpty() == false)
  23. {
  24. Vertex<String> v = minCost.dequeue().element();
  25. for(Edge<RouteInfo> e: deliveries.incidentEdges(v))
  26. {
  27. Vertex<String> opp = deliveries.opposite(v, e);
  28.  
  29. double thruEdist = Double.parseDouble(v.get("COST").toString()) + e.element().getCost();
  30. if(thruEdist < (Double)opp.get("COST"))
  31. {
  32. opp.put("COST", thruEdist);
  33. minCost.changePriority((PriorityQueueEntry)opp.get("LOCATOR"), thruEdist);
  34. opp.put("EDGE", e);
  35. }
  36. }
  37.  
  38. }
  39. Vertex<String> v = end;
  40. Edge<RouteInfo> eri = (Edge<RouteInfo>)v.get("EDGE");
  41. minRoute.add(eri.element());
  42. v = deliveries.opposite(v, eri);
  43. while(v != start)
  44. {
  45. eri = (Edge<RouteInfo>)v.get("EDGE");
  46. minRoute.addBefore(minRoute.first(), eri.element());
  47. v = deliveries.opposite(v, eri);
  48. }
  49.  
  50. if(start==null || end== null) {
  51. return null;
  52. }
  53.  
  54. return minRoute;
  55. }
  56.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement