Cod sursa(job #2148575)

Utilizator BarbumateiBarbu Matei Barbumatei Data 1 martie 2018 20:01:19
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>
#define min( a, b ) ( ( a < b ) ? a : b )
#define NMAX 100
#define INF ( 1 << 30 ) - 1
int dist[NMAX][NMAX];
int main() {
  FILE *fin, *fout;
  fin = fopen( "royfloyd.in", "r" );
  fout = fopen( "royfloyd.out", "w" );
  int n, i, j, k;
  fscanf( fin, "%d", &n );
  for ( i = 0; i < n; i++ )
    for ( j = 0; j < n; j++ ) {
      fscanf( fin, "%d", &dist[i][j] );
      if ( dist[i][j] == 0 && i != j )
        dist[i][j] = INF;
    }
  for ( k = 0; k < n; k++ )
    for ( i = 0; i < n; i++ )
      for ( j = 0; j < n; j++ )
        dist[i][j] = min( dist[i][j], dist[i][k] + dist[k][j] );
  for ( i = 0; i < n; i++ ) {
    for ( j = 0; j < n; j++ ){
      if ( dist[i][j] == INF )
        dist[i][j] = 0;
      fprintf( fout, "%d ", dist[i][j] );
    }
    fprintf( fout, "\n" );
  }
  fclose( fin );
  fclose( fout );
  return 0;
}