Cod sursa(job #2856739)

Utilizator mihaipriboimihailucapriboi mihaipriboi Data 24 februarie 2022 11:42:02
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <stdio.h>
#include <algorithm>

#define MAXN 100
#define INF (int)1e6

int rf[MAXN][MAXN];

int main() {
  FILE *fin, *fout;
  int n, i, j, k;
  fin = fopen( "royfloyd.in", "r" );

  fscanf( fin, "%d", &n );
  for( i = 0; i < n; i++ ) {
    for( j = 0; j < n; j++ ) {
      fscanf( fin, "%d", &rf[i][j] );
      if( rf[i][j] == 0 )
        rf[i][j] = INF;
    }
  }

  fclose( fin );

  for( k = 0; k < n; k++ )
    for( i = 0; i < n; i++ )
      for( j = 0; j < n; j++ )
        if( rf[i][k] != INF && rf[k][j] != INF )
          rf[i][j] = std::min(rf[i][j], rf[i][k] + rf[k][j]);

  fout = fopen( "royfloyd.out", "w" );

  for( i = 0; i < n; i++ ) {
    for( j = 0; j < n; j++ ) {
      if( rf[i][j] == INF || i == j )
        fprintf( fout, "0 " );
      else
        fprintf( fout, "%d ", rf[i][j] );
    }
    fprintf( fout, "\n" );
  }

  fclose( fout );
  return 0;
}