Advertisement
Yahya-Ak-Ayoub

Dijkstra

Oct 31st, 2020
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.24 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.Comparator;
  11. import java.util.PriorityQueue;
  12. import java.util.Stack;
  13. import java.util.StringTokenizer;
  14.  
  15. public class Main{
  16.  
  17.     static BufferedReader reader;
  18.     static StringTokenizer tok;
  19.     static int n, m, parents[];
  20.     static boolean vistid[];
  21.     static long cost[];
  22.     static ArrayList<pair> graph[];
  23.     static PriorityQueue<pair2> q;
  24.     static Stack<Integer> s;
  25.     static BufferedWriter writer;
  26.  
  27.     public static void main(String[] args) throws IOException {
  28.         Input();
  29.         sol();
  30.  
  31.     }
  32.  
  33.     public static void sol() throws IOException {
  34.         writer = new BufferedWriter(new OutputStreamWriter(System.out));
  35.         vistid = new boolean[n + 1];
  36.         cost = new long[n + 1];
  37.         parents = new int[n + 1];
  38.         q = new PriorityQueue<pair2>(Comparator.comparing((pair2 obj)-> obj.wieght));
  39.        
  40.         q.add(new pair2(1, 0));
  41.         vistid[1] = true;
  42.         Arrays.fill(cost, Integer.MAX_VALUE);
  43.         cost[1] = 0;
  44.         while (!q.isEmpty()) {
  45.  
  46.             pair2 obj = q.poll();
  47.  
  48.             for (pair x : graph[obj.node]) {
  49.                 if (!vistid[x.node] || cost[x.node] > obj.wieght + x.wieght) {
  50.                     vistid[x.node] = true;
  51.                     parents[x.node] = obj.node;
  52.                     cost[x.node] = obj.wieght + x.wieght;
  53.                     q.add(new pair2(x.node, cost[x.node]));
  54.                 }
  55.             }
  56.         }
  57.  
  58.         s = new Stack<Integer>();
  59.         int x = parents[n];
  60.         if (x != 0) {
  61.  
  62.             while (x != 0) {
  63.                 s.push(x);
  64.                 x = parents[x];
  65.             }
  66.  
  67.             while (!s.isEmpty()) {
  68.                 writer.write(s.pop() + " ");
  69.             }
  70.             writer.write(n + "");
  71.             writer.flush();
  72.         } else {
  73.             System.out.println(-1);
  74.         }
  75.  
  76.     }
  77.  
  78.     public static void Input() throws IOException {
  79.         reader = new BufferedReader(new InputStreamReader(System.in));
  80.         tok = new StringTokenizer(reader.readLine());
  81.         n = parseInt(tok.nextToken());
  82.         m = parseInt(tok.nextToken());
  83.         graph = new ArrayList[n + 1];
  84.  
  85.         for (int i = 0; i <= n; i++) {
  86.             graph[i] = new ArrayList<pair>();
  87.         }
  88.  
  89.         for (int i = 0; i < m; i++) {
  90.             tok = new StringTokenizer(reader.readLine());
  91.             int a = parseInt(tok.nextToken()), b = parseInt(tok.nextToken()), wieght = parseInt(tok.nextToken());
  92.             graph[a].add(new pair(b, wieght));
  93.             graph[b].add(new pair(a, wieght));
  94.  
  95.         }
  96.  
  97.     }
  98.  
  99.     public static class pair {
  100.  
  101.         int node, wieght;
  102.  
  103.         public pair(int node, int wieght) {
  104.             this.node = node;
  105.             this.wieght = wieght;
  106.         }
  107.     }
  108.  
  109.     public static class pair2 {
  110.  
  111.  
  112.         long wieght;
  113.         int node;
  114.  
  115.         public pair2(int node, long wieght) {
  116.             this.node = node;
  117.             this.wieght = wieght;
  118.         }
  119.  
  120.      
  121.     }
  122. }
  123.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement