Cod sursa(job #1262130)

Utilizator allexx2200Atanasiu Alexandru-Marian allexx2200 Data 12 noiembrie 2014 23:40:50
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>

#define FIN "royfloyd.in"
#define FOUT "royfloyd.out"
#define MAX_NODURI 100

int mat[MAX_NODURI][MAX_NODURI], n;

void citire(){
	FILE* in = fopen(FIN, "rt");
	if(!in) return;
	fscanf(in, "%d", &n);
	for(int i=0; i < n; i++){
		for(int j=0; j < n; j++){
			fscanf(in, "%d", &mat[i][j]);
		}
	}
	fclose(in);
}

void scriere(){
	FILE* out = fopen(FOUT, "wt");
	if(!out) return;
	for(int i=0; i < n; i++){
		for(int j=0; j < n; j++){
			fprintf(out, "%d ", mat[i][j]);
		}
		fprintf(out, "\n");
	}
	fclose(out);
}

void RoyFloyd(){
	for(int k=0; k < n; k++){
		for(int i=0; i < n; i++){
			for(int j=0; j < n; j++){
				if (mat[i][k] && mat[k][j] && 
				   (mat[i][j] > mat[i][k] + mat[k][j] || !mat[i][j]) && 
				    i != j){ 
					mat[i][j] = mat[i][k] + mat[k][j];
				}
			}
		}
	}
}

int main(){	
	citire();
	RoyFloyd();
	scriere();
	return 0;
}