Cod sursa(job #145800)

Utilizator alecmanAchim Ioan Alexandru alecman Data 29 februarie 2008 15:18:35
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<stdio.h>
#include<string.h>

#define INPUT "royfloyd.in"
#define OUTPUT "royfloyd.out"
#define FOR(x,y,z) for(x=y;x<=z;++x)
#define CL(x) memset(x,0,sizeof(x));

FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");

long n,drum[101][101];

void readValues();

void solveFunction();

void printSolution();

int main(){
  readValues();
  solveFunction();
  fclose(fin);
  fclose(fout);
  return 0;
}

void readValues(){
  fscanf(fin, "%ld", &n);
  CL(drum);
  int i,j;
  FOR(i,1,n)
    FOR(j,1,n)
      fscanf(fin, "%ld", &drum[i][j]);
}

void solveFunction(){
  int i,j,k;
  FOR(k,1,n)
    FOR(i,1,n)
      FOR(j,1,n)
        if(i!=j && drum[i][k] && drum[k][j])
          if(drum[i][j]>drum[i][k]+drum[k][j])
            drum[i][j]=drum[i][k]+drum[k][j];
  printSolution();
}

void printSolution(){
  int i,j;
  FOR(i,1,n){
    FOR(j,1,n)
      fprintf(fout, "%ld ", drum[i][j]);
    fprintf(fout, "\n");
  }
}