Cod sursa(job #3358640)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 18 iunie 2026 19:35:39
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
using namespace std;

const int INF = 1e9;
const int NMAX = 100;
int a[NMAX + 1][NMAX + 1];
//a[i][j] = costul muchiei de la i la j
int d[NMAX + 1][NMAX + 1];
//d[i][j] = costul minim al unui drum de la i la j

int main() {
    ifstream cin("royfloyd.in");
    ofstream cout("royfloyd.out");
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            cin >> a[i][j];
            d[i][j] = a[i][j];
            if(i != j && a[i][j] == 0) {
                d[i][j] = INF; //d_0[i][j]
            }
        }
    }
    //O(n ^ 3)
    for(int k = 1; k <= n; k++) {
        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= n; j++) {
                if(d[i][j] > d[i][k] + d[k][j]) {
                    d[i][j] = d[i][k] + d[k][j];
                }
            }
        }
    }
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            if(d[i][j] == INF) {
                d[i][j] = 0;
            }
            cout << d[i][j] << ' ';
        }
        cout << '\n';
    }

}