Cod sursa(job #2089597)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 16 decembrie 2017 19:49:13
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>

const int MAXN = 1e2;
const int INF = 0x3f3f3f3f;

int dist[MAXN][MAXN];

int main() {
  int n;
  FILE *f = fopen("royfloyd.in", "r");
  fscanf(f, "%d", &n);
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      fscanf(f, "%d", &dist[i][j]);
      if (!dist[i][j]) {
        dist[i][j] = INF;
      }
    }
  }
  fclose(f);
  for (int k = 0; k < n; ++k) {
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < n; ++j) {
        if ((i ^ j) && dist[i][j] > dist[i][k] + dist[k][j]) {
          dist[i][j] = dist[i][k] + dist[k][j];
        }
      }
    }
  }
  f = fopen("royfloyd.out", "w");
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      fprintf(f, "%d ", dist[i][j] == INF ? 0 : dist[i][j]);
    }
    fprintf(f, "\n");
  }
  fclose(f);
  return 0;
}