Se dă un graf orientat ponderat cu n noduri și m arce – în care fiecare arc are asociat un cost, număr natural strict pozitiv. Folosind algoritmul Roy-Floyd, construiți matricea costurilor minime, a[i][j] fiind costul minim al unui drum de la i la j, dacă există un asemenea drum, sau -1 în caz contrar.
#include <iostream>
using namespace std;
int main()
{
int n,m;
cin >> n >> m;
int a[105][105];
// initializare
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==j)
a[i][j]=0;
else
a[i][j]=-1;
}
// citire arce
for(int i=1;i<=m;i++)
{
int x,y,c;
cin >> x >> y >> c;
a[x][y]=c;
}
// Roy-Floyd
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(a[i][k]!=-1 && a[k][j]!=-1)
{
int cost = a[i][k] + a[k][j];
if(a[i][j]==-1 || cost<a[i][j])
a[i][j]=cost;
}
}
// afisare
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout << a[i][j] << " ";
cout << '\n';
}
return 0;
}