Cod sursa(job #3191273)

Utilizator PetraPetra Hedesiu Petra Data 9 ianuarie 2024 10:38:12
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <cmath>

#define NMAX 103

using namespace std;

ifstream fin ("royfloyd.in");
ofstream fout ("royfloyd.out");

//ifstream fin ("rf.in");
//ofstream fout ("rf.out");

struct nod {
    int nod, d;
};
int n, a[NMAX][NMAX];
long long dp[NMAX][NMAX]; /// dp[i][j] - distanta minima pentru a ajunge din nodul i in nodul j

void citire()
{
    fin >> n;

    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
        {
            fin >> a[i][j];
            dp[i][j] = a[i][j];
        }
}

void afis()
{
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
            fout << dp[i][j] << " ";
        fout << "\n";
    }
}

int main()
{
    citire();

    for (int k = 1; k <= n; k++)
    {
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                if (i == k || j == k || i == j) continue;

                if (dp[i][j] > dp[i][k] + dp[k][j] && (dp[i][k] + dp[k][j] != 0))
                    dp[i][j] = dp[i][k] + dp[k][j];
            }
        }
    }

    afis();

    return 0;
}