Guest User

Untitled

a guest
Jul 16th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. package graph;
  2.  
  3. import java.io.*;
  4. import java.util.StringTokenizer;
  5. import java.util.Arrays;
  6. import java.util.PriorityQueue;
  7.  
  8. public class Dijkstra_ElogV implements Runnable {
  9.  
  10. class Pair implements Comparable<Pair>{
  11. int number;
  12. double d;
  13.  
  14.  
  15. public int compareTo(Pair that) {
  16. if(d < that.d) return -1;
  17. if(d > that.d) return 1;
  18. return 0;
  19. }
  20. }
  21.  
  22. int n;
  23. int m;
  24. int[] head;
  25. int[] value;
  26. int[] next;
  27. Pair[] d;
  28. int[] parent;
  29.  
  30. int[][] w;
  31.  
  32. PriorityQueue<Pair> q = new PriorityQueue<Pair>();
  33.  
  34. void relax(int u, int v) {
  35. if(d[u].d + w[u][v] < d[v].d) {
  36.  
  37. q.remove(d[v]);
  38.  
  39. d[v].d = d[u].d + w[u][v];
  40.  
  41. q.add(d[v]);
  42.  
  43. parent[v] = u;
  44. }
  45. }
  46.  
  47. void dijkstra(int v) {
  48. parent[v] = v;
  49. d[v].d = 0;
  50.  
  51. for(int i = 1; i <= n; i++) q.add(d[i]);
  52.  
  53. while(!q.isEmpty()) {
  54. Pair u = q.poll();
  55. for(int i = head[u.number]; i != -1; i = next[i]) {
  56. relax(u.number, value[i]);
  57. }
  58. }
  59.  
  60. }
  61.  
  62. public void run() {
  63. try {
  64. BufferedReader in = new BufferedReader(new FileReader("input.txt"));
  65. PrintWriter out = new PrintWriter("output.txt");
  66. StringTokenizer st = new StringTokenizer(in.readLine());
  67.  
  68. n = Integer.parseInt(st.nextToken());
  69. m = Integer.parseInt(st.nextToken());
  70.  
  71. head = new int[n + 1];
  72. value = new int[2 * m];
  73. next = new int[2 * m];
  74. d = new Pair[n + 1];
  75. parent = new int[n + 1];
  76. w = new int[n + 1][n + 1];
  77.  
  78. Arrays.fill(head, -1);
  79.  
  80. for(int i = 1; i <= n; i++) {
  81. d[i] = new Pair();;
  82. d[i].number = i;
  83. d[i].d = Double.POSITIVE_INFINITY;
  84. }
  85.  
  86. int j = 0;
  87. int t1;
  88. int t2;
  89.  
  90. for(int i = 0; i < m; i++) {
  91. st = new StringTokenizer(in.readLine());
  92. t1 = Integer.parseInt(st.nextToken());
  93. t2 = Integer.parseInt(st.nextToken());
  94.  
  95. value[j] = t2;
  96. next[j] = head[t1];
  97. head[t1] = j++;
  98.  
  99. value[j] = t1;
  100. next[j] = head[t2];
  101. head[t2] = j++;
  102.  
  103. w[t1][t2] = w[t2][t1] = Integer.parseInt(st.nextToken());
  104. }
  105.  
  106. dijkstra(1);
  107.  
  108. for(int i = 1; i <= n; i++) {
  109. if(d[i].d == Double.POSITIVE_INFINITY) {
  110. out.print("inf ");
  111. continue;
  112. }
  113. out.print((int) d[i].d + " ");
  114. }
  115.  
  116. in.close();
  117. out.close();
  118. } catch(IOException e) {}
  119. }
  120.  
  121. public static void main(String[] args) {
  122. new Thread(new Dijkstra_ElogV()).start();
  123. }
  124. }
Add Comment
Please, Sign In to add comment