Cod sursa(job #1733945)

Utilizator adasarcaAda Sarca adasarca Data 26 iulie 2016 10:39:02
Problema Algoritmul lui Dijkstra Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 2.13 kb
import java.io.FileInputStream;
import java.io.FileWriter;
import java.util.*;

/**
 * Created by Ada on 7/25/2016.
 */
public class Main {

    public static void main(String[] argv) {
        Integer n, m;
        HashMap<Integer, HashMap<Integer, Integer>> graph = new HashMap<Integer, HashMap<Integer, Integer>>();

        //read graph
        try {
            Integer x, y, cost;
            Scanner scanner = new Scanner(new FileInputStream("dijkstra.in"));
            n = scanner.nextInt();
            m = scanner.nextInt();

            for (int i = 1; i <= n; i++) {
                graph.put(i, new HashMap<Integer, Integer>());
            }

            for (int j = 1; j <= m; j++) {
                x = scanner.nextInt();
                y = scanner.nextInt();
                cost = scanner.nextInt();
                graph.get(x).put(y, cost);
                graph.get(y).put(x, cost);
            }
            scanner.close();
        } catch (Exception exception) {
            exception.printStackTrace();
            return;
        }

        //bellman ford
        Integer distances[] = new Integer[n + 1];
        Arrays.fill(distances, Integer.MAX_VALUE);
        distances[1] = 0;
        Integer predecessor[] = new Integer[n + 1];
        Arrays.fill(predecessor, 1);

        for (int i = 1; i <= n; i++) {
            for (Map.Entry<Integer, Integer> neighbour : graph.get(i).entrySet()) {
                if (distances[neighbour.getKey()] > distances[i] + neighbour.getValue()) {
                    distances[neighbour.getKey()] = distances[i] + neighbour.getValue();
                    predecessor[neighbour.getKey()] = i;
                }
            }
        }

        //write output file
        try {
            FileWriter fileWriter = new FileWriter("dijkstra.out");
            for (int i = 2; i <= n; i++) {
                fileWriter.write(distances[i] + " ");
            }
            fileWriter.write("\n");
            fileWriter.close();
        } catch (Exception exception) {
            exception.printStackTrace();
        }

        return;
    }
}