Cod sursa(job #2395146)

Utilizator alexge50alexX AleX alexge50 Data 2 aprilie 2019 11:48:52
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>

#pragma GCC optimize ("O3")
#pragma GCC target("sse3")

#define o3 __attribute__((optimize("-O3")))
#define always_inline __inline__ __attribute__((always_inline))

#define fast_shit o3 always_inline

#define MAX_N 100
int distance[MAX_N + 1][MAX_N + 1];

fast_shit int min(int a, int b)
{
  int v = a - b;
  int r = (v + (v >> 31)) ^ (v >> 31);

  return (a + b - r) / 2;
}

int main()
{
  FILE *fin, *fout;
  int n, m, k;
  int a, b;

  fin = fopen("royfloyd.in", "r");
  fscanf(fin, "%d", &n);
  for(int i = 1; i <= n; i++)
  {
    for(int j = 1; j <= n; j++)
      fscanf(fin, "%d", &distance[i][j]);
  }
  fclose(fin);

  for(int k = 1; k <= n; k++)
  {
    for(int i = 1; i <= n; i++)
      for(int j = 1; j <= n; j++)
          distance[i][j] = min(distance[i][j], distance[i][k] + distance[k][j]);
  }

  fout = fopen("royfloyd.out", "w");
  for(int i = 1; i <= n; i++)
  {
    for(int j = 1; j <= n; j++)
      fprintf(fin, "%d ", distance[i][j]);
    fprintf(fin, "\n");
  }
  fclose(fout);

  return 0;
}