Cod sursa(job #2064260)

Utilizator alexnekiNechifor Alexandru alexneki Data 12 noiembrie 2017 01:42:23
Problema Algoritmul lui Dijkstra Scor 90
Compilator java Status done
Runda Arhiva educationala Marime 2.43 kb
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.PriorityQueue;
 
public class Main {
 
  static int n;
  static int m;
 
  static List<Edge>[] g;
  static int[] dist;
 
  static class Edge {
 
    int to;
    int cost;
 
    Edge(int to, int cost) {
      this.to = to;
      this.cost = cost;
    }
  }
 
  public static void main(String[] args) throws FileNotFoundException, IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("dijkstra.in")));
    PrintWriter out = new PrintWriter(new FileOutputStream("dijkstra.out"));

    String[] parts = br.readLine().split(" ");
    n = Integer.parseInt(parts[0]);
    m = Integer.parseInt(parts[1]);
 
    g = new List[n];
    dist = new int[n];
//    Arrays.fill(g, new ArrayList<>());
    for (int i = 0; i < n; i++) {
      g[i] = new ArrayList<>();
    }
 
    Arrays.fill(dist, Integer.MAX_VALUE);
 
    dist[0] = 0;
    for (int i = 0; i < m; i++) {
      parts = br.readLine().split(" ");
      int from = Integer.parseInt(parts[0]) - 1;
      int to = Integer.parseInt(parts[1]) - 1;
      int cost = Integer.parseInt(parts[2]);
      g[from].add(new Edge(to, cost));
//      out.println(from + ", " + to + ", " + cost);
    }
 
    PriorityQueue<Integer> pq = new PriorityQueue<>(n, new Comparator<Integer>() {
      @Override
      public int compare(Integer o1, Integer o2) {
        return dist[o1] - dist[o2];
      }
    });
    pq.add(0);
    while (!pq.isEmpty()) {
      int node = pq.poll();
      for (int j = 0; j < g[node].size(); j++) {
        if (dist[node] + g[node].get(j).cost < dist[g[node].get(j).to]) {
          dist[g[node].get(j).to] = dist[node] + g[node].get(j).cost;
          pq.offer(g[node].get(j).to);
        }
      }
    }
 
    StringBuilder sb = new StringBuilder("");
    for (int i = 1; i < n; i++) {
      if (dist[i] < Integer.MAX_VALUE) {
        sb.append(dist[i]).append(" ");
      } else {
        sb.append("0 ");
      }
    }
    out.println(sb);
    out.close();
  } 
}