Cod sursa(job #1453130)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 22 iunie 2015 18:26:17
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.67 kb
#include <stdio.h>
#define MAX 105
#define INF 1<<20

void rf(int v[][MAX], int n);

int main(){
	freopen("royfloyd.in", "r", stdin);
	freopen("royfloyd.out", "w", stdout);
	int n, i, j, a[MAX][MAX];
	scanf("%d", &n);
	for(i = 1; i <= n; i++)
		for(j = 1; j <= n; j++){
			scanf("%d", &a[i][j]);
			if(a[i][j] == 0)
				a[i][j] = INF;
		}

	rf(a, n);
	for(i = 1; i <= n; i++){
		for(j = 1; j <= n; j++)
			printf("%d ", i == j || a[i][j] == INF ? 0 : a[i][j]);
		printf("\n");
	}

	return 0;
}

void rf(int v[][MAX], int n){
	int i, j, k;
	for(k = 1; k <= n; k++)
		for(i = 1; i <= n; i++)
			for(j = 1; j <= n; j++)
				if(v[i][j] > v[i][k] + v[k][j])
					v[i][j] = v[i][k] + v[k][j];
}