Cod sursa(job #406315)

Utilizator nandoLicker Nandor nando Data 1 martie 2010 13:45:13
Problema Floyd-Warshall/Roy-Floyd Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <cstdio>

const int MAX=101,INF=100000000;
int way[MAX][MAX],n;

inline int min(int a,int b){
	return (a<b)?a:b;
}

int main(){
	FILE* fin=fopen("royfloyd.in","r");
	FILE* fout=fopen("royfloyd.out","w");
	fscanf(fin,"%u",&n);
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			fscanf(fin,"%u",&way[i][j]);
			if(way[i][j]==0&&i!=j){
				way[i][j]=INF;
			}	
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			for(int k=0;k<n;k++){
				if(way[i][j]&&way[i][k]&&way[k][j]){
					way[i][j]=min(way[i][j],way[i][k]+way[k][j]);
				}
			}
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			fprintf(fout,"%u ",way[i][j]);
		}
		fputc('\n',fout);
	}
	return 0;
}