Cod sursa(job #1397102)

Utilizator paul-gPaul Grigoras paul-g Data 23 martie 2015 11:42:57
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>
#include <climits>

using namespace std;

const int N = 101;

int main(int argc, char *argv[]) {
  ifstream f{"royfloyd.in"};
  ofstream g{"royfloyd.out"};

  int w[N][N], d[N][N];

  int n;
  f >> n;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      f >> w[i][j];
      if (i == j)
        d[i][j] = 0;
      else
        d[i][j] = w[i][j] != 0 ? w[i][j] : INT_MAX / 2;
    }
  }

  for (int k = 0; k < n; ++k) {
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < n; ++j) {
        if (i != j)
          d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
      }
    }
  }

  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      g << d[i][j] << " ";
    }
    g << "\n";
  }

  return 0;
}