Cod sursa(job #3344102)

Utilizator Roberto_CChirvasitu Roberto Roberto_C Data 1 martie 2026 13:26:45
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define ll long long

const int NMAX = 100;

int mat[NMAX+1][NMAX+1];
long long dp[NMAX+1][NMAX+1];
int n;

void read(){
    cin >> n;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            cin >> mat[i][j];
}

void solve(){
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++){
            if(i == j)
                dp[i][j] = 0;
            else if(mat[i][j] == 0)
                dp[i][j] = LLONG_MAX;
            else
                dp[i][j] = 1LL*mat[i][j];
        }

    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            dp[i][j] = min(dp[i][j],dp[i][1] + dp[1][j]);
    for(int k = 2; k <= n; k++){
        for(int i = 1; i <= n; i++){
            if(dp[i][k] == LLONG_MAX)
                continue;
            for(int j = 1; j <= n; j++){
                if(dp[j][k] == LLONG_MAX)
                    continue;
                dp[i][j] = min(dp[i][j],dp[i][k] + dp[k][j]);
            }
        }
    }
    for(int i = 1; i <=n; i++){
        for(int j =1; j <= n; j++)
            cout << dp[i][j] << ' ';
        cout << '\n';
    }
}

int main() {
    freopen("royfloyd.in","r",stdin);
    freopen("royfloyd.out","w",stdout);
    read();
    solve();
    return 0;
}