Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.51 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;
  4. import java.util.HashSet;
  5. import java.util.List;
  6. import java.util.PriorityQueue;
  7. import java.util.Set;
  8.  
  9. public class ucs1 {
  10.  
  11. public static void main(String[] args) {
  12.  
  13. //Node assignments
  14. Node n1 = new Node("Manchester");
  15. Node n2 = new Node("Birmingham");
  16. Node n3 = new Node("Bristol");
  17. Node n4 = new Node("London");
  18.  
  19. Node n5 = new Node("Luebeck");
  20. Node n6 = new Node("Hamburg");
  21. Node n7 = new Node("Bremen");
  22. Node n8 = new Node("Berlin");
  23. Node n9 = new Node("Hannover");
  24. Node n10 = new Node("Magdeburg");
  25. Node n11 = new Node("Leipzig");
  26. Node n12 = new Node("Dresden");
  27. Node n13 = new Node("Dortmund");
  28. Node n14 = new Node("Kassel");
  29. Node n15 = new Node("Nuremberg");
  30. Node n16 = new Node("Frankfurt");
  31. Node n17 = new Node("Duesseldorf");
  32. Node n18 = new Node("Saarburcken");
  33. Node n19 = new Node("Karlsruhe");
  34. Node n20 = new Node("Stuttgart");
  35. Node n21 = new Node("Munich");
  36.  
  37. //Initialize Edges for Map 1
  38. n1.adjacencies = new Edge[]
  39. {
  40. new Edge(n2,84)
  41. };
  42. n2.adjacencies = new Edge[]
  43. {
  44. new Edge(n1, 84),
  45. new Edge(n3, 85),
  46. new Edge(n4, 117)
  47. };
  48. n3.adjacencies = new Edge[]
  49. {
  50. new Edge(n2, 85)
  51. };
  52. n4.adjacencies = new Edge[]
  53. {
  54. new Edge(n2, 117)
  55. };
  56.  
  57. //Initialize Edges for Map 2
  58. n5.adjacencies = new Edge[]
  59. {
  60. new Edge(n6, 63)
  61. };
  62. n6.adjacencies = new Edge[]
  63. {
  64. new Edge(n5, 63),
  65. new Edge(n7, 116),
  66. new Edge(n8, 291),
  67. new Edge(n9, 153)
  68. };
  69. n7.adjacencies = new Edge[]
  70. {
  71. new Edge(n6, 116),
  72. new Edge(n9, 132),
  73. new Edge(n13, 234)
  74. };
  75. n8.adjacencies = new Edge[]
  76. {
  77. new Edge(n6, 291),
  78. new Edge(n10, 166),
  79. new Edge(n12, 204)
  80. };
  81. n9.adjacencies = new Edge[]
  82. {
  83. new Edge(n6, 153),
  84. new Edge(n7, 132),
  85. new Edge(n10, 148),
  86. new Edge(n14, 165)
  87. };
  88. n10.adjacencies = new Edge[]
  89. {
  90. new Edge(n9, 148),
  91. new Edge(n8, 166),
  92. new Edge(n11, 125)
  93. };
  94. n11.adjacencies = new Edge[]
  95. {
  96. new Edge(n10, 125),
  97. new Edge(n12, 119),
  98. new Edge(n15, 263)
  99. };
  100. n12.adjacencies = new Edge[]
  101. {
  102. new Edge(n11, 119),
  103. new Edge(n8, 204)
  104. };
  105. n13.adjacencies = new Edge[]
  106. {
  107. new Edge(n7, 234),
  108. new Edge(n16, 221),
  109. new Edge(n17, 69),
  110. new Edge(n18, 350)
  111. };
  112. n14.adjacencies = new Edge[]
  113. {
  114. new Edge(n9, 165),
  115. new Edge(n16, 185)
  116. };
  117. n15.adjacencies = new Edge[]
  118. {
  119. new Edge(n11, 263),
  120. new Edge(n16, 222),
  121. new Edge(n20, 207),
  122. new Edge(n21, 171)
  123. };
  124. n16.adjacencies = new Edge[]
  125. {
  126. new Edge(n13, 221),
  127. new Edge(n14, 185),
  128. new Edge(n15, 222),
  129. new Edge(n20, 200),
  130. new Edge(n18, 177)
  131. };
  132. n17.adjacencies = new Edge[]
  133. {
  134. new Edge(n13, 69)
  135. };
  136. n18.adjacencies = new Edge[]
  137. {
  138. new Edge(n13, 350),
  139. new Edge(n16, 177),
  140. new Edge(n19, 143)
  141. };
  142. n19.adjacencies = new Edge[]
  143. {
  144. new Edge(n18, 143),
  145. new Edge(n20, 71)
  146. };
  147. n20.adjacencies = new Edge[]
  148. {
  149. new Edge(n19, 71),
  150. new Edge(n16, 200),
  151. new Edge(n15, 207),
  152. new Edge(n21, 215)
  153. };
  154. n21.adjacencies = new Edge[]
  155. {
  156. new Edge(n15, 171),
  157. new Edge(n20, 215)
  158. };
  159.  
  160. UCS(n6,n17);
  161.  
  162. List<Node> path = printPath(n17);
  163.  
  164. System.out.println("Path: " + path);
  165.  
  166.  
  167. }
  168.  
  169. //Search Algorithm
  170. public static void UCS(Node source, Node goal)
  171. {
  172. source.pathCost = 0;
  173.  
  174. PriorityQueue<Node> queue = new PriorityQueue<Node>(20,
  175. new Comparator<Node>()
  176. {
  177. public int compare(Node i, Node j)
  178. {
  179. if(i.pathCost > j.pathCost) {
  180. return 1;
  181. }
  182.  
  183. else if(i.pathCost < j.pathCost)
  184. {
  185. return -1;
  186. }
  187.  
  188. else
  189. {
  190. return 0;
  191. }
  192. }
  193. }
  194. );
  195.  
  196. queue.add(source);
  197. Set<Node> explored = new HashSet<Node>();
  198. boolean found = false;
  199.  
  200. do
  201. {
  202. Node current = queue.poll();
  203. explored.add(current);
  204.  
  205. if(current.value.equals(goal.value))
  206. {
  207. found = true;
  208. }
  209.  
  210. for(Edge e: current.adjacencies)
  211. {
  212. Node child = e.target;
  213. double cost = e.cost;
  214. child.pathCost = current.pathCost + cost;
  215.  
  216. if(!explored.contains(child) && !queue.contains(child))
  217. {
  218. child.parent = current;
  219. queue.add(child);
  220.  
  221. System.out.println(child);
  222. System.out.println(queue);
  223. System.out.println();
  224. }
  225. else if(queue.contains(child) && (child.pathCost>current.pathCost))
  226. {
  227. child.parent = current;
  228.  
  229. queue.remove(child);
  230. queue.add(child);
  231. }
  232. }
  233.  
  234. }while(!queue.isEmpty());
  235. }
  236.  
  237. public static List<Node> printPath(Node target)
  238. {
  239. List<Node> path = new ArrayList<Node>();
  240.  
  241. for(Node node = target; node!=null; node = node.parent)
  242. {
  243. path.add(node);
  244. }
  245.  
  246. Collections.reverse(path);
  247.  
  248. return path;
  249. }
  250.  
  251. }
  252.  
  253. class Node{
  254.  
  255. public final String value;
  256. public double pathCost;
  257. public Edge[] adjacencies;
  258. public Node parent;
  259.  
  260. public Node(String val)
  261. {
  262. value = val;
  263. }
  264.  
  265. public String toString()
  266. {
  267. return value;
  268. }
  269.  
  270. }
  271.  
  272. class Edge{
  273.  
  274. public final double cost;
  275. public final Node target;
  276.  
  277. public Edge(Node targetNode, double costVal)
  278. {
  279. cost = costVal;
  280. target = targetNode;
  281. }
  282. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement