Cod sursa(job #1585415)

Utilizator andreibotilaBotila Andrei andreibotila Data 30 ianuarie 2016 23:35:26
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.79 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){
			matrPond[i][j] = 1000;
		}
	}

	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(i != j){
					if(matrPond[i][k] == 0 || matrPond[k][j] == 0){
						matrPond[i][j] = matrPond[i][j];
					}
					else if(matrPond[i][j] > matrPond[i][k] + matrPond[k][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;
}