Cod sursa(job #2815370)

Utilizator CalinCruceanu3576Cruceanu CalinCruceanu3576 Data 9 decembrie 2021 15:39:18
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");

class Graf
{
private:
  int N;
  vector<vector<int>> adj;
  void royFloyd();

public:
  Graf(int);
  void adaugaMuchie();
  void Afisare();
};

Graf ::Graf(int n)
{
  N = n;
  adj.resize(n + 1);
}

void Graf ::adaugaMuchie()
{
  int i, j, x;
  for (i = 0; i < N; i++)
  {
    for (j = 0; j < N; j++)
    {
      fin >> x;
      adj[i].push_back(x);
      if (i != j && adj[i][j] == 0)
        adj[i].push_back(INT_MAX);
    }
  }
}

void Graf ::royFloyd()
{
  int i, j, l;
  for (l = 0; l < N; l++)
    for (i = 0; i < N; i++)
      for (j = 0; j < N; j++)
        if (adj[i][l] != INT_MAX && adj[l][j] != INT_MAX && adj[i][l] + adj[l][j] < adj[i][j])
          adj[i][j] = adj[i][l] + adj[l][j];
}

void Graf ::Afisare()
{
  int i, j;
  royFloyd();
  for (i = 0; i < N; i++)
  {
    for (j = 0; j < N; j++)
    {
      if(adj[i][j] == INT_MAX) 
        fout << 0 <<" ";
      else 
        fout << adj[i][j] << " ";
    }
      
    fout << "\n";
  }
}

int main()
{
  int n;
  fin >> n;
  Graf G(n);
  G.adaugaMuchie();
  G.Afisare();
  return 0;
}