Cod sursa(job #641761)

Utilizator vitaleamaldur vitalik vitalea Data 29 noiembrie 2011 13:00:21
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.77 kb
#include<stdio.h>
#include<stdlib.h>
int **m,i,j,k,n;
FILE *in,*out;

void read(){
	fscanf(in,"%d",&n);

	m=(int**)malloc(n*sizeof(int*));
	for(i=0; i<n; i++)
	    m[i]=(int*)malloc(n*sizeof(int));

	for(i=0; i<n; i++)
	    for( j=0; j<n; j++)
	        fscanf(in,"%d",&m[i][j]);
}

void print(){
	for(i=0; i<n; i++){
		for(j=0; j<n; j++)
		    fprintf(out,"%d ",m[i][j]);
		fprintf(out,"\n");
	}
}

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

int main(){
	in=fopen("royfloyd.in","r");
	out=fopen("royfloyd.out","w");
	read();
	fclose(in);
	royfloyd();
	print();
	fclose(out);
	return 0;
}