Cod sursa(job #1705968)

Utilizator FlorentinaPetcuFlorentina Petcu FlorentinaPetcu Data 21 mai 2016 10:32:40
Problema Floyd-Warshall/Roy-Floyd Scor 30
Compilator java Status done
Runda Arhiva educationala Marime 1.39 kb
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class Main {
	static int[][] dist;

	public static void FloydWarshall(int[][] edge) {
		int n = edge.length;

		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				if (edge[i][j] != 0)
					dist[i][j] = edge[i][j];
				else
					dist[i][j] = 1000;
			}
		}
		for (int k = 0; k < n; k++) {
			for (int i = 0; i < n; i++) {
				for (int j = 0; j < n; j++) {
					if (i != j)
						dist[i][j] = Math.min(dist[i][j], dist[i][k] + dist[k][j]);
				}
			}
		}

	}

	public static void main(String[] args) throws IOException {

		int[][] edge;
		Scanner input = new Scanner(new FileReader("royfloyd.in"));
		int nodes = input.nextInt();
		edge = new int[nodes][nodes];

		for (int i = 0; i < nodes; i++)
			for (int j = 0; j < nodes; j++)
				edge[i][j] = input.nextInt();
		input.close();

		dist = new int[nodes][nodes];
		FloydWarshall(edge);
		BufferedWriter write = new BufferedWriter(new FileWriter(new File("royfloyd.out")));
		for (int i = 0; i < nodes; i++) {
			for (int j = 0; j < nodes; j++)
				if (dist[i][j] == 1000)
					write.write("0 ");
				else
					write.write(dist[i][j] + " ");
			write.newLine();
		}
		write.close();
	}
}