Cod sursa(job #1176253)

Utilizator usakoTsu Usako usako Data 25 aprilie 2014 19:56:11
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>
#define OO 2000000000
#define NM 100
int N, a[NM][NM];
int main() {
  freopen("royfloyd.in","r",stdin);
  freopen("royfloyd.out","w",stdout);
  scanf("%d",&N);
  for (int i = 0; i < N; ++i) {
    for (int j = 0; j<N; ++j) {
      scanf("%d",&a[i][j]);
      if (a[i][j] == 0) {
        a[i][j] = OO;
      }
    }
  }

  for (int k = 0; k < N; ++k) {
    for (int i = 0; i < N; ++i) {
      if (i == k) {
        continue;
      }
      for (int j = 0; j < N; ++j) {
        if (i == j || j == k || a[i][k] == OO || a[k][j] == OO) {
          continue;
        }
        if (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) {
      printf("%d ",(a[i][j] == OO) ? 0 : a[i][j]);
    }
    printf("\n");
  }
  return 0;
}