Guest User

Untitled

a guest
Jan 17th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.48 KB | None | 0 0
  1. Minimum distance for source vertex 0 to reach vertex 0 is 0
  2. Minimum distance for source vertex 0 to reach vertex 1 is 4
  3. Minimum distance for source vertex 0 to reach vertex 2 is 12
  4. Minimum distance for source vertex 0 to reach vertex 3 is 19
  5. Minimum distance for source vertex 0 to reach vertex 4 is 21
  6. Minimum distance for source vertex 0 to reach vertex 5 is 11
  7. Minimum distance for source vertex 0 to reach vertex 6 is 9
  8. Minimum distance for source vertex 0 to reach vertex 7 is 8
  9. Minimum distance for source vertex 0 to reach vertex 8 is 14
  10.  
  11. Minimum distance for source vertex 0 to reach vertex 0 is 0
  12. Minimum distance for source vertex 0 to reach vertex 1 is 4
  13. Minimum distance for source vertex 0 to reach vertex 2 is 2
  14. Minimum distance for source vertex 0 to reach vertex 3 is 7
  15. Minimum distance for source vertex 0 to reach vertex 4 is 9
  16. Minimum distance for source vertex 0 to reach vertex 5 is 2
  17. Minimum distance for source vertex 0 to reach vertex 6 is 1
  18. Minimum distance for source vertex 0 to reach vertex 7 is 1
  19. Minimum distance for source vertex 0 to reach vertex 8 is 2
  20.  
  21. import java.util.ArrayList;
  22. import java.util.Arrays;
  23. import java.util.List;
  24. import java.util.PriorityQueue;
  25. import java.util.Queue;
  26.  
  27. public class Dijkstra
  28. {
  29. public static final int INF = 100000;
  30.  
  31. private static class IPair implements Comparable<IPair>
  32. {
  33. int first;
  34. int second;
  35.  
  36. IPair(int first, int second)
  37. {
  38. this.first = first;
  39. this.second = second;
  40. }
  41.  
  42. public int compareTo(IPair that)
  43. {
  44. return this.first - that.first;
  45. }
  46. }
  47.  
  48. public static int[] dijkstra(List<IPair>[] adj, int source)
  49. {
  50. Queue<IPair> pq = new PriorityQueue<>();
  51. int[] dist = new int[adj.length];
  52. boolean[] visited = new boolean[adj.length];
  53.  
  54. Arrays.fill(dist, INF);
  55.  
  56. pq.add(new IPair(0, source));
  57. dist[source] = 0;
  58.  
  59. while (!pq.isEmpty())
  60. {
  61. int u = pq.poll().second;
  62.  
  63. if (visited[u])
  64. continue;
  65.  
  66. System.err.println(u);
  67.  
  68. visited[u] = true;
  69.  
  70. for (IPair pair : adj[u])
  71. {
  72. int v = pair.first;
  73. int weight = pair.second;
  74.  
  75. if (dist[v] > dist[u] + weight)
  76. {
  77. dist[v] = dist[u] + weight;
  78. pq.add(new IPair(dist[v], v));
  79.  
  80. System.err.println(Arrays.toString(dist));
  81. }
  82. }
  83. }
  84.  
  85. return dist;
  86. }
  87.  
  88. private static void addEdge(List<IPair>[] adj, int u, int v, int weight)
  89. {
  90. adj[u].add(new IPair(v, weight));
  91. adj[v].add(new IPair(u, weight));
  92. }
  93.  
  94. public static void main(String[] args)
  95. {
  96. int V = 9;
  97.  
  98. List<IPair>[] adj = new ArrayList[V];
  99.  
  100. Arrays.fill(adj, new ArrayList<IPair>());
  101.  
  102. addEdge(adj, 0, 1, 4);
  103. addEdge(adj, 0, 7, 8);
  104. addEdge(adj, 1, 2, 8);
  105. addEdge(adj, 1, 7, 11);
  106. addEdge(adj, 2, 3, 7);
  107. addEdge(adj, 2, 8, 2);
  108. addEdge(adj, 2, 5, 4);
  109. addEdge(adj, 3, 4, 9);
  110. addEdge(adj, 3, 5, 14);
  111. addEdge(adj, 4, 5, 10);
  112. addEdge(adj, 5, 6, 2);
  113. addEdge(adj, 6, 7, 1);
  114. addEdge(adj, 6, 8, 6);
  115. addEdge(adj, 7, 8, 7);
  116.  
  117. int[] dist = dijkstra(adj, 0);
  118.  
  119. for (int i = 0; i < V; ++i)
  120. System.out.println("Minimum distance for source vertex " + 0 + " to reach vertex " + i + " is " + dist[i]);
  121. }
  122. }
Add Comment
Please, Sign In to add comment