Cod sursa(job #3335942)

Utilizator flaviusstefflavius stefan flaviusstef Data 23 ianuarie 2026 21:48:50
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");
int n, m;
vector<vector<int>> d;
const int INF = 1e6;
void FloydWarshall()  {
//acronimul KIA -> K(intermediar) -> I (sursa) -> J (destinatie)
    for (int k=1;k<=n;k++) { // pasul k, nodul intermediar ("pivotul")
                             // am voie sa folosesc nodul k ca punct de legatura pt scurtarea drumurilor?
        for (int i=1;i<=n;i++) { // nodul sursa (start)
            for (int j=1;j<=n;j++) { // nodul destinatie (final)
                //daca pot ajunge de la i la k si de la k la j gen i->j
                if (d[i][k] != INF && d[k][j] != INF) {
                    if (d[i][j] > d[i][k] + d[k][j]) {
                        d[i][j]=d[i][k] + d[k][j];
                    }
                }
            }
        }
    }
}
int main() {
    fin>>n;
    d.resize(n+1);
    for (int i=1;i<=n;i++) {
        d[i].resize(n+1);
        for (int j=1;j<=n;j++) {
            int a;
            fin>>a;
            if (i==j) d[i][j]=0;
            else if (a==0) d[i][j] = INF;
            else d[i][j]=a;
        }
    }
    FloydWarshall();
    for (int i=1;i<=n;i++) {
        for (int j=1;j<=n;j++) {
            fout<<d[i][j]<<" ";
        }
        fout<<endl;
    }
}