Advertisement
Guest User

TilYuri

a guest
Apr 29th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.26 KB | None | 0 0
  1. package Model;
  2.  
  3. import java.io.*;
  4. import java.util.HashMap;
  5. import java.util.HashSet;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import java.awt.geom.Point2D;
  9. import java.awt.geom.Line2D;
  10.  
  11.  
  12. public class EdgeWeightedDigraph implements Serializable {
  13. public static final long serialVersionUID = 20160217;
  14. private ArrayList<WayNode> residential, road, highway;
  15. public int edges;
  16. private HashMap<Long, ArrayList<Long>> connections;
  17. private HashMap<Long,Point2D> map = new HashMap<>();
  18. private HashMap<String, String> names = new HashMap<>();
  19.  
  20.  
  21.  
  22.  
  23. public EdgeWeightedDigraph(HashMap<Long, Point2D> _map, ArrayList<WayNode> _residential, ArrayList<WayNode> _road, ArrayList<WayNode> _highway) {
  24. map = _map;
  25. connections = new HashMap<>();
  26. residential = _residential;
  27. road = _road;
  28. highway = _highway;
  29. edges = 0;
  30. int size = 0;
  31.  
  32.  
  33. for(WayNode w : residential) {
  34. edges += w.vejPunkter.size()-1;
  35. for(int i = 0; i < w.vejPunkter.size()-1 ; i++) {
  36. if(!connections.containsKey(w.vejPunkter.get(i))) {
  37. connections.put(w.vejPunkter.get(i), new ArrayList<Long>());
  38. }
  39. if(!connections.containsKey(w.vejPunkter.get(i+1))) {
  40. connections.put(w.vejPunkter.get(i+1), new ArrayList<Long>());
  41. }
  42. connections.get(w.vejPunkter.get(i)).add(w.vejPunkter.get(i+1));
  43. connections.get(w.vejPunkter.get(i+1)).add(w.vejPunkter.get(i));
  44. String temp = String.valueOf(w.vejPunkter.get(i)) + String.valueOf(w.vejPunkter.get(i+1));
  45. String temp2 =String.valueOf(w.vejPunkter.get(i+1)) + String.valueOf(w.vejPunkter.get(i));
  46. System.out.println("temp1: " + temp);
  47. System.out.println("temp2: " + temp2);
  48. names.put(temp,w.getName());
  49. names.put(temp2,w.getName());
  50. }
  51. }
  52.  
  53. for(WayNode w : road) {
  54. edges += w.vejPunkter.size()-1;
  55. for(int i = 0; i < w.vejPunkter.size()-1 ; i++) {
  56. if(!connections.containsKey(w.vejPunkter.get(i))) {
  57. connections.put(w.vejPunkter.get(i), new ArrayList<Long>());
  58. }
  59. if(!connections.containsKey(w.vejPunkter.get(i+1))) {
  60. connections.put(w.vejPunkter.get(i+1), new ArrayList<Long>());
  61. }
  62. connections.get(w.vejPunkter.get(i)).add(w.vejPunkter.get(i+1));
  63. connections.get(w.vejPunkter.get(i+1)).add(w.vejPunkter.get(i));
  64. String temp = String.valueOf(w.vejPunkter.get(i)) + String.valueOf(w.vejPunkter.get(i+1));
  65. String temp2 =String.valueOf(w.vejPunkter.get(i+1)) + String.valueOf(w.vejPunkter.get(i));
  66. names.put(temp,w.getName());
  67. names.put(temp2,w.getName());
  68. }
  69. }
  70.  
  71. for(WayNode w : highway) {
  72. edges += w.vejPunkter.size()-1;
  73. for(int i = 0; i < w.vejPunkter.size()-1 ; i++) {
  74. if(!connections.containsKey(w.vejPunkter.get(i))) {
  75. connections.put(w.vejPunkter.get(i), new ArrayList<Long>());
  76. }
  77. if(!connections.containsKey(w.vejPunkter.get(i+1))) {
  78. connections.put(w.vejPunkter.get(i+1), new ArrayList<Long>());
  79. }
  80. connections.get(w.vejPunkter.get(i)).add(w.vejPunkter.get(i+1));
  81. connections.get(w.vejPunkter.get(i+1)).add(w.vejPunkter.get(i));
  82. String temp = String.valueOf(w.vejPunkter.get(i)) + String.valueOf(w.vejPunkter.get(i+1));
  83. String temp2 =String.valueOf(w.vejPunkter.get(i+1)) + String.valueOf(w.vejPunkter.get(i));
  84. names.put(temp,w.getName());
  85. names.put(temp2,w.getName());
  86. }
  87. }
  88. }
  89.  
  90.  
  91. public void bfs(Long from, Long to) {
  92.  
  93. Queue<Long> queue = new Queue<>();
  94.  
  95. HashSet<Long> marked = new HashSet<>();
  96.  
  97. HashMap<Long, Double> distTo = new HashMap<Long, Double>();
  98. HashMap<Long, Long> edgeTo = new HashMap<Long, Long>();
  99.  
  100. marked.add(from);
  101. distTo.put(from, 0.0);
  102. queue.enqueue(from);
  103.  
  104. while(!queue.isEmpty()) {
  105. Long point = queue.dequeue();
  106. for(Long p : connections.get(point)) {
  107. if(!marked.contains(p)) {
  108. edgeTo.put(p, point);
  109. double weigth = distTo.get(point);
  110. distTo.put(p, map.get(point).distance(map.get(p))+weigth);
  111. marked.add(p);
  112. queue.enqueue(p);
  113. }
  114. if(marked.contains(to)) {
  115. while(!queue.isEmpty())
  116. queue.dequeue();
  117. }
  118. }
  119. }
  120.  
  121.  
  122. if(distTo.containsKey(to) && (distTo.get(to) != 0 && !from.equals(to))) {
  123. System.out.println("distTo " + ((distTo.get(to)*111*1000)-((distTo.get(to)*111*1000)%100)));
  124. System.out.print(to);
  125. long edge = edgeTo.get(to);
  126. while(edge != from) {
  127. System.out.print("-");
  128. System.out.print(edge);
  129. edge = edgeTo.get(edge);
  130.  
  131. }
  132. System.out.print("-" + from);
  133. System.out.println("\n");
  134. } else if (from.equals(to)){
  135. System.out.println("Path length: 0\n");
  136. } else {
  137. System.out.println("Path length: -1\n");
  138. }
  139.  
  140. }
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement