Cod sursa(job #745037)

Utilizator ciorile.chioareBogatu Adrian ciorile.chioare Data 10 mai 2012 13:58:57
Problema Floyd-Warshall/Roy-Floyd Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <cstdio>

int main(void) {

  int **a;
  int n;

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

  fscanf(in, "%d", &n);

  a = new int*[n + 1];
  for(int i = 0; i < n; ++i) {
    a[i] = new int[n];
    for(int j = 0; j < n; ++j) {
      fscanf(in, "%d", &a[i][j]);
    }
  }

  for(int i = 0; i < n; ++i) {
    for(int j = 0; j < n; ++j) {
      for(int k = 0; k < n; ++k) {
        if((i == j) || (i == k) || (k == j))
          continue;
        if(a[i][j] > a[i][k] + a[k][j] || !a[i][j])
          a[i][j] = a[i][k] + a[k][j];
      }
    }
  }

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

  fclose(in);
  fclose(out);

  return 0;
}