Cod sursa(job #1241381)

Utilizator danny794Dan Danaila danny794 Data 13 octombrie 2014 14:18:13
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <cstdio>

#define NMAX 105

using namespace std;

int N;
int matrix[NMAX][NMAX];

void read()
{
  freopen("royfloyd.in", "r", stdin);
  freopen("royfloyd.out", "w", stdout);
  scanf("%d", &N);

  for(int i = 0; i < N; i++)
    for(int j = 0; j < N; j++)
      scanf("%d", &matrix[i][j]);
}

void solve()
{
  for(int k = 0; k < N; k++)
  {
    for(int i = 0; i < N; i++)
      if(matrix[i][k])
      {
        for(int j = 0; j < N; j++)
          if(matrix[j][k] && i != j)
          {
            if(matrix[i][j] > matrix[i][k] + matrix[k][j] || !matrix[i][j])
              matrix[i][j] = matrix[i][k] + matrix[k][j];
          }
      }
  }
}

void printSolution()
{
  for(int i = 0; i < N; i++)
  {
    for(int j = 0; j < N; j++)
      printf("%d ", matrix[i][j]);
    printf("\n");
  }
}

int main()
{
  read();
  solve();
  printSolution();
	return 0;
}