Cod sursa(job #1585422)

Utilizator andreibotilaBotila Andrei andreibotila Data 30 ianuarie 2016 23:46:36
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.68 kb
#include <stdio.h>

#define FOR(i, a, b) for (i = a; i <= b ; ++i)

int main(){
	FILE *in, *out;
	in = fopen("royfloyd.in", "r");
	out = fopen("royfloyd.out", "w");

	int N, i, j, k;
	fscanf(in, "%d", &N);
	int matrPond[N][N];

	FOR(i, 1, N){
		FOR(j, 1, N){
			fscanf(in, "%d", &matrPond[i][j]);
		}
	}

	FOR(k, 1, N){
		FOR(i, 1, N){
			FOR(j, 1, N){
				if(matrPond[i][k] && matrPond[k][j] && 
					(matrPond[i][j] > matrPond[i][k] + matrPond[k][j] || !matrPond[i][j]) 
					&& i != j)
					matrPond[i][j] = matrPond[i][k] + matrPond[k][j];
			}
		}
	}

	FOR(i, 1, N){
		FOR(j, 1, N){
			fprintf(out, "%d ", matrPond[i][j]);
		}
		fprintf(out, "\n");
	}

	fclose(in);
	fclose(out);
	return 0;
}