Cod sursa(job #3292673)

Utilizator Luca_georgescuLucageorgescu Luca_georgescu Data 8 aprilie 2025 22:40:17
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
#define int long long

using namespace std;

ifstream f("royfloyd.in");
ofstream g("royfloyd.out");

int d[1005][1005],n;
const int inf=INT_MAX;

void init(int n)
{
    for (int i=1; i<=n; i++ )
        for (int j=1; j<=n; j++ )
            d[i][j]=inf;

    for (int i=1; i<=n; i++ )
        d[i][i]=0;
}

void royf(int n)
{
    for (int k=1; k<=n; k++ )
        for (int i=1; i<=n; i++ )
            for (int j=1; j<=n; j++ )
                if ( d[i][k]!=inf && d[k][j]!=inf )
                     d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}

signed main()
{
    f >> n;

    init(n);

    int x;
    for (int i=1; i<=n; i++ )
        for (int j=1; j<=n; j++ )
            f >> x, d[i][j]=x;

    for (int i=1; i<=n; i++ )
        for (int j=1; j<=n; j++ )
            if ( d[i][j]==0 && i!=j )
                d[i][j]=inf;

    royf(n);

    for (int i=1; i<=n; i++, g << '\n' )
        for (int j=1; j<=n; j++ )
           if ( d[i][j]==inf ) g << 0 << " ";
           else g << d[i][j] << " ";
    return 0;
}