Cod sursa(job #3198345)

Utilizator AdrianRosuRosu Adrian Andrei AdrianRosu Data 28 ianuarie 2024 22:54:17
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
#define DIM 1001

using namespace std;

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

int cost[DIM][DIM], dp[DIM][DIM];

/*

dp[i][j] -> costul minim de la nodul i la nodul j

*/

int x, y, z, i, j, k, n, m, Q;

int main(){

    fin >> n;

    for(i=1;i<=n;i++)

        for(j=1;j<=n;j++)

            fin >> cost[i][j];

    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(cost[i][j])
                dp[i][j] = cost[i][j];
            else dp[i][j] = 1e9;

   for(i=1;i<=n;i++)
        dp[i][i] = 0;

    for(k=1;k<=n;k++)
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                if(i != j)
                    dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]);



    for(i=1;i<=n;i++, fout << "\n")
        for(j=1;j<=n;j++)
            if(dp[i][j] == 1e9)
                fout << "-1 ";
            else fout << dp[i][j] << " ";


}