Cod sursa(job #2202756)

Utilizator benjamin2205Zeic Beniamin benjamin2205 Data 9 mai 2018 20:07:50
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <bits/stdc++.h>

// Se da un graf orientat cu n noduri, m muchii.
// Sa se afiseze drumurile minime intre doua noduri

using namespace std;

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

int n;
int adiac[1005][1005];

void citire();

void rezolvare() {
    /// Iau fiecare nod intermediar cu fiecare nod.
    for (int k = 1; k <= n; ++k) {
        for (int j = 1; j <= n; ++j) {
            for (int i = 1; i <= n; ++i) {
                // No, bun.
                /// Daca distanta drumului prin k de la i la j
                /// e mai mica decat distanta drumului curent de la
                /// i la j SI
                /// i si j sunt diferiti
                if (adiac[i][j] > adiac[i][k] + adiac[k][j] && i != j) {
                    adiac[i][j] = adiac[i][k] + adiac[k][j];
                }
            }
        }
    }
}

void AFISAREMATRICE() {
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            g << adiac[i][j] << ' ';
        }
        g << '\n';
    }
}

int main()
{
    citire();
    rezolvare();
    AFISAREMATRICE();
    return 0;
}

void citire() {
    f >> n;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            f >> adiac[i][j];
        }
    }
}