Cod sursa(job #3238488)

Utilizator Traian_7109Traian Mihai Danciu Traian_7109 Data 25 iulie 2024 19:47:29
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>

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

#define MAXN 100
#define INFINIT 100000000

int mat[MAXN][MAXN];

int main() {
  int n, i, j, k;
  
  #ifndef LOCAL
    freopen("royfloyd.in", "r", stdin);
    freopen("royfloyd.out", "w", stdout);
  #endif
  
  scanf("%d", &n);
  for(i = 0; i < n; i++) {
    for(j = 0; j < n; j++) {
      scanf("%d", &mat[i][j]);
      if(mat[i][j] == 0) {
        mat[i][j] = INFINIT;
      }
    }
  }
  
  for(k = 0; k < n; k++) {
    for(i = 0; i < n; i++) {
      for(j = 0; j < n; j++) {
        mat[i][j] = min(mat[i][j], mat[i][k] + mat[k][j]);
      }
    }
  }
  
  for(i = 0; i < n; i++) {
    for(j = 0; j < n; j++) {
      if(mat[i][j] == INFINIT || i == j) {
        mat[i][j] = 0;
      }
      printf("%d ", mat[i][j]);
    }
    fputc('\n', stdout);
  }
  
  return 0;
}