Cod sursa(job #2224461)

Utilizator TrixerAdrian Dinu Trixer Data 24 iulie 2018 03:44:02
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator c Status done
Runda Arhiva educationala Marime 0.67 kb
#include <stdio.h>

#define min(a, b) (((a) < (b)) ? (a) : (b))

int main(void)
{
	int n;
	int dist[100][100] = {0};

	// read input
	freopen("royfloyd.in", "r", stdin);

	scanf("%d", &n);
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			scanf("%d", &dist[i][j]);

	// solve
	for (int k = 0; k < n; k++)
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++) {
				if (dist[i][j] == 0)
					continue;

				int d = dist[i][k] + dist[k][j];
				dist[i][j] = min(d, dist[i][j]);
			}

	// write output
	freopen("royfloyd.out", "w", stdout);

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++)
			printf("%d ", dist[i][j]);
		printf("\n");
	}

	return 0;
}