Cod sursa(job #2240880)

Utilizator alex.cojocaruAlex Cojocaru alex.cojocaru Data 14 septembrie 2018 12:41:06
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <stdio.h>

#define NMAX 1024
#define INF 1000000000

using namespace std;


int cost [ NMAX + 1 ] [ NMAX + 1 ] ;

void royfloyd (int n ) {
  for (int k = 1 ; k <= n ; k++ )
    for (int i = 1 ; i <= n ; i++ )
      for (int j = 1 ; j <= n ; j++ )
        if ( (cost[i][k] != INF && cost[k][j] != INF) && cost[i][j] > cost[i][k]+cost[k][j] )
          cost[i][j] = cost[i][k]+cost[k][j] ;
}

int main() {

  FILE *fin, *fout ;
  fin = fopen ("royfloyd.in", "r" ) ;
  fout = fopen ("royfloyd.out", "w" ) ;
  int n, i, j, m ;
  fscanf (fin, "%d", &n ) ;
  for (i = 1 ; i <= n ; i++ )
    for (j = 1 ; j <= n ; j++ ) {
      fscanf (fin, "%d", &cost[i][j] ) ;
      if (cost[i][j] == 0 )
        cost[i][j] = INF ;
    }
  royfloyd(n) ;
  for (i = 1 ; i <= n ; i++ ) {
    for (j = 1 ; j <= n ; j++ )
      if (cost[i][j] != INF && i!= j )
        fprintf (fout, "%d ", cost[i][j] ) ;
      else
        fprintf (fout, "0 " ) ;
    fprintf (fout, "\n" ) ;
  }
  return 0;
}