Cod sursa(job #1483676)

Utilizator mike93Indricean Mihai mike93 Data 9 septembrie 2015 18:56:02
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>
#include <limits.h>
#define NMAX 100

int main() {
	FILE* fin = fopen("royfloyd.in", "r");
	int n;
	fscanf(fin, "%d\n", &n);
	int t[NMAX][NMAX];
	int i, j;
	for(i=0; i<n; i++) {
		for(j=0; j<n; j++) {
			fscanf(fin, "%d", &t[i][j]);
		}
		fscanf(fin, "\n");
	}
	fclose(fin);
	
	for(i=0; i<n; i++) {
		for(j=0; j<n; j++) {
			if((i!=j) && (t[i][j]==0)) {
				t[i][j] = LONG_MAX/2;
			}
		}
	}
	
	int k;
	for(k=0; k<n; k++) {
		for(i=0; i<n; i++) {
			for(j=0; j<n; j++) {
				if(t[i][j] > t[i][k] + t[k][j]) {
					t[i][j] = t[i][k] + t[k][j];
				}
			}
		}
	}
	
	for(i=0; i<n; i++) {
		for(j=0; j<n; j++) {
			if(t[i][j] == LONG_MAX/2) {
				t[i][j] = 0;
			}
		}
	}
	
	FILE* fout = fopen("royfloyd.out", "w");
	for(i=0; i<n; i++) {
		for(j=0; j<n; j++) {
			fprintf(fout, "%d ", t[i][j]);
		}
		fprintf(fout, "\n");
	}
	
	fclose(fout);
	return 0;
}