Pagini recente » Cod sursa (job #888876) | Cod sursa (job #491618) | Cod sursa (job #845876) | Cod sursa (job #646776) | Cod sursa (job #2086514)
import java.io.*;
import java.util.*;
import javax.print.attribute.standard.RequestingUserName;
public class Main {
private static final String INPUT_FILE_PATH = "src/dijkstra.in";
private static final String OUTPUT_FILE_PATH = "src/dijkstra.out";
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(new FileReader(INPUT_FILE_PATH));
PrintWriter out = new PrintWriter(OUTPUT_FILE_PATH);
int n = in.nextInt();
int m = in.nextInt();
DirectedGraph mGraph = new DirectedGraph(n);
while (m-- > 0) {
int source = in.nextInt();
int dest = in.nextInt();
int cost = in.nextInt();
mGraph.insertEdge(source, dest, cost);
}
Long[] distances = mGraph.getShortestPaths(1);
for (int i = 2; i <= n; ++i) {
out.print(((Long.compare(distances[i], Long.MAX_VALUE) != 0) ? distances[i] : 0L) + " ");
}
out.flush();
in.close();
out.close();
}
static class DirectedGraph {
static class Edge {
int dest;
long cost;
public Edge(int dest, int cost) {
this.dest = dest;
this.cost = (long) cost;
}
}
List<List<Edge>> neighbors;
public DirectedGraph(int vertices) {
this.neighbors = new ArrayList<>();
for (int i = 0; i < vertices + 1; ++i) {
this.neighbors.add(new ArrayList<Edge>());
}
}
public void insertEdge(int source, int dest, int cost) {
if (this.neighbors.size() > 0) {
this.neighbors.get(source).add(new Edge(dest, cost));
}
}
public Long[] getShortestPaths(int source) {
Long[] dist = new Long[this.neighbors.size()];
Arrays.fill(dist, Long.MAX_VALUE);
dist[source] = 0L;
PriorityQueue<GraphTuple> minHeap = new PriorityQueue<>();
minHeap.add(new GraphTuple(1, dist[source]));
while (!minHeap.isEmpty()) {
int currVertex = minHeap.poll().vertex;
List<Edge> currNeighbors = this.neighbors.get(currVertex);
for (Edge edge : currNeighbors) {
if (dist[edge.dest] > dist[currVertex] + edge.cost) {
dist[edge.dest] = dist[currVertex] + edge.cost;
minHeap.add(new GraphTuple(edge.dest, dist[edge.dest]));
}
}
}
return dist;
}
static class GraphTuple implements Comparable<GraphTuple> {
int vertex;
long cost;
public GraphTuple() {
}
public GraphTuple(int vertex, long cost) {
this.vertex = vertex;
this.cost = cost;
}
@Override
public int compareTo(GraphTuple that) {
return Long.compare(this.cost, that.cost);
}
}
}
}