Cod sursa(job #2224736)

Utilizator radustn92Radu Stancu radustn92 Data 24 iulie 2018 21:42:13
Problema Floyd-Warshall/Roy-Floyd Scor 80
Compilator java Status done
Runda Arhiva educationala Marime 2.88 kb
import java.io.*;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        InputStream inputStream = new FileInputStream("royfloyd.in");
        OutputStream outputStream = new FileOutputStream("royfloyd.out");

        try (InputReader inputReader = new InputReader(inputStream);
            PrintWriter printWriter = new PrintWriter(outputStream)) {
            new Solver(inputReader, printWriter).solve();
        }
    }

    static class Solver {

        private static final int INF = Integer.MAX_VALUE >> 1;

        private int[][] bestPath;

        private int N;

        private InputReader inputReader;

        private PrintWriter printWriter;

        public Solver(InputReader inputReader, PrintWriter printWriter) {
            this.inputReader = inputReader;
            this.printWriter = printWriter;
        }

        public void solve() {
            N = inputReader.nextInt();
            bestPath = new int[N + 1][N + 1];
            for (int i = 1; i <= N; i++) {
                for (int j = 1; j <= N; j++) {
                    int cost = inputReader.nextInt();
                    bestPath[i][j] = (cost == 0) ? INF : cost;
                }
            }

            for (int k = 1; k <= N; k++) {
                for (int i = 1; i <= N; i++) {
                    for (int j = 1; j <= N; j++) {
                        if (i != j) {
                            bestPath[i][j] = Math.min(bestPath[i][j], bestPath[i][k] + bestPath[k][j]);
                        }
                    }
                }
            }

            for (int i = 1; i <= N; i++) {
                for (int j = 1; j <= N; j++) {
                    printWriter.print(bestPath[i][j] == INF ? 0 : bestPath[i][j]);
                    if (j < N) {
                        printWriter.print(" ");
                    }
                }
                printWriter.println();
            }
        }
    }

    static class InputReader implements AutoCloseable {

        private BufferedReader bufferedReader;

        private StringTokenizer stringTokenizer;

        public InputReader(InputStream inputStream) {
            bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            stringTokenizer = null;
        }

        private String nextToken() {
            if (stringTokenizer == null || !stringTokenizer.hasMoreTokens()) {
                try {
                    stringTokenizer = new StringTokenizer(bufferedReader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }

            return stringTokenizer.nextToken();
        }

        private int nextInt() {
            return Integer.parseInt(nextToken());
        }

        @Override
        public void close() throws IOException {
            bufferedReader.close();
        }
    }
}