Cod sursa(job #1474783)

Utilizator ConsstantinTabacu Raul Consstantin Data 22 august 2015 22:13:11
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#define IN_FILE_NAME  "royfloyd.in"
#define OUT_FILE_NAME "royfloyd.out"
#define NMAX 100
#define INF 10000
FILE *in, *out;
int cost[NMAX][NMAX];
int N;

void read() {
  fscanf(in, "%d", &N);
  for (int i = 0 ; i < N ; i++) {
    for (int j = 0 ; j < N ; j++ ) {
      fscanf(in, "%d", &cost[i][j]);
      cost[i][j] = cost[i][j] == 0 && i != j ? INF : cost[i][j];
    }
  }
}

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

void solve() {
  int i, j, k;
  for ( k = 0 ; k < N ; k++) {
    for (i = 0 ; i < N ; i++) {
      for (j = 0 ; j < N ; j++ ) {
        if (k != i &&
            k != j &&
            i != j) {
              cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j]);
        }
      }
    }
  }
}

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

int main() {
  in = fopen(IN_FILE_NAME, "r");
  out = fopen(OUT_FILE_NAME, "w");
  read();
  solve();
  printMatrix();
  fclose(in);
  fclose(out);
  return 0;
}