Algoritmul Roy-Floyd

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;
}