Advertisement
Yahya-Ak-Ayoub

Dijkstra

Oct 31st, 2020
315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.58 KB | None | 0 0
  1.  
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.io.OutputStreamWriter;
  7. import static java.lang.Integer.parseInt;
  8. import java.util.ArrayList;
  9. import java.util.Arrays;
  10. import java.util.PriorityQueue;
  11. import java.util.Stack;
  12. import java.util.StringTokenizer;
  13.  
  14. public class Main{
  15.  
  16.     static ArrayList<pair> graph[];
  17.     static long cost[];
  18.     static int n, m, parents[];
  19.     static boolean visited[];
  20.     static PriorityQueue<pair2> q;
  21.     static BufferedWriter writer;
  22.     static BufferedReader reader;
  23.     static Stack<Integer> s;
  24.  
  25.     public static void main(String[] args) throws IOException {
  26.         input();
  27.         sol();
  28.     }
  29.  
  30.     public static void input() throws IOException {
  31.          reader = new BufferedReader(new InputStreamReader(System.in));
  32.         StringTokenizer tok = new StringTokenizer(reader.readLine());
  33.         n = parseInt(tok.nextToken());
  34.         m = parseInt(tok.nextToken());
  35.         graph = new ArrayList[1 + n];
  36.  
  37.         for (int i = 0; i <= n; i++) {
  38.             graph[i] = new ArrayList<pair>();
  39.         }
  40.  
  41.         for (int i = 1; i <= m; i++) {
  42.             tok = new StringTokenizer(reader.readLine());
  43.  
  44.             int x = parseInt(tok.nextToken()), y = parseInt(tok.nextToken()), wieght = parseInt(tok.nextToken());
  45.             graph[x].add(new pair(y, wieght));
  46.             graph[y].add(new pair(x, wieght));
  47.         }
  48.  
  49.      
  50.     }
  51.  
  52.     public static void sol() throws IOException {
  53.         writer = new BufferedWriter(new OutputStreamWriter(System.out));
  54.         cost = new long[n + 1];
  55.         parents = new int[n + 1];
  56.         visited = new boolean[n + 1];
  57.         q = new PriorityQueue<pair2>();
  58.         s = new Stack<Integer>();
  59.         q.add(new pair2(1, 0));
  60.         visited[1] = true;
  61.         Arrays.fill(cost, Integer.MAX_VALUE);
  62.         cost[1] = 0;
  63.  
  64.         while (!q.isEmpty()) {
  65.             pair2 obj = q.poll();
  66.  
  67.             for (pair i : graph[obj.cell]) {
  68.                 if (!visited[i.cell] || cost[i.cell] > (i.wieght + obj.wieght)) {
  69.                     visited[i.cell] = true;
  70.                     cost[i.cell] = i.wieght + obj.wieght;
  71.                     q.add(new pair2(i.cell, cost[i.cell]));
  72.                     parents[i.cell] = obj.cell;
  73.                 }
  74.             }
  75.  
  76.         }
  77.  
  78.         int x = n;
  79.  
  80.         while (0 != parents[x]) {
  81.             s.push(x);
  82.             x = parents[x];
  83.  
  84.         }
  85.         if (!s.isEmpty()) {
  86.             writer.write(1 + " ");
  87.             while (!s.isEmpty()) {
  88.                 writer.write(s.pop() + " ");
  89.             }
  90.             writer.flush();
  91.         } else {
  92.             System.out.println(-1);
  93.  
  94.         }
  95.     }
  96.  
  97.     public static class pair {
  98.  
  99.         int cell, wieght;
  100.  
  101.         public pair(int cell, int wieght) {
  102.             this.cell = cell;
  103.             this.wieght = wieght;
  104.         }
  105.  
  106.     }
  107.  
  108.     public static class pair2 implements Comparable<pair2> {
  109.  
  110.         int cell;long wieght;
  111.  
  112.         public pair2(int cell, long wieght) {
  113.             this.cell = cell;
  114.             this.wieght = wieght;
  115.         }
  116.  
  117.         @Override
  118.         public int compareTo(pair2 t) {
  119.             if (this.wieght < t.wieght) {
  120.                 return -1;
  121.             } else if (this.wieght > t.wieght) {
  122.                 return 1;
  123.             } else {
  124.                 return 0;
  125.             }
  126.         }
  127.  
  128.     }
  129.  
  130. }
  131. /*
  132.  
  133. 10 10
  134. 1 4 200
  135. 1 9 197
  136. 3 4 79
  137. 3 5 213
  138. 3 6 149
  139. 5 8 3
  140. 5 9 189
  141. 6 7 130
  142. 6 9 51
  143. 8 10 135
  144.  
  145.  
  146. 1 9 5 8 10
  147.  
  148. 3 1
  149. 1 2 1
  150.  
  151.  
  152.  
  153.  */
  154.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement