Cod sursa(job #679115)

Utilizator cpblncCristian Grajdeanu cpblnc Data 12 februarie 2012 19:40:12
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator c Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int min(int a, int b){
	if(a < b)
		return a;
	return b;
}

int main(int argc, char** argv){

int N,i,j,k;

FILE *fr = fopen("royfloyd.in", "r");
FILE *fw = fopen("royfloyd.out", "w");

fscanf(fr, "%d", &N);
int graph[N][N];

for(i = 0; i < N; i++) {
  for(j = 0; j < N; j++) {
	fscanf(fr, "%d", &graph[i][j]);
	if(graph[i][j] == 0 && i != j)
	  graph[i][j] = INT_MAX; 
  }
}
fclose(fr); 
 
int aux[N][N];

for(k = 0; k < N; k++) {	
  for(i = 0; i < N; i++)
    for(j = 0; j < N; j++)
	  aux[i][j] = min(graph[i][j], graph[i][k] + graph[k][j]);
  for(i = 0; i < N; i++)
    for(j = 0; j < N; j++)
	  if(i != j)
	    graph[i][j] = aux[i][j];  
}

for(i = 0; i < N; i++) {
  for(j = 0; j < N; j++)
   	fprintf(fw, "%d ", graph[i][j]);
  fprintf(fw, "\n");	
}
fclose(fw);

}