Cod sursa(job #3286199)

Utilizator Mocanu_Tudor_CristianMocanu Tudor Cristian Mocanu_Tudor_Cristian Data 13 martie 2025 20:17:37
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.46 kb
/*#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

#define NMAX 3000
int MOD = 1000003;
int q, n, st, dr, dp[2][6 * NMAX + 1], rez[6 * NMAX + 1], ncurr = 1;

struct Zar
{
    int n, st, dr, poz, s;
}v[100001];

int comp1(Zar a, Zar b)
{
    return a.n < b.n;
}

int comp2(Zar a, Zar b)
{
    return a.poz < b.poz;
}

int main()
{
    fin >> q;
    for(int i = 1; i <= q; i++)
    {
        fin >> v[i].n >> v[i].st >> v[i].dr;
        v[i].poz = i;
        v[i].s = 0;
    }
    sort(v + 1, v + q + 1, comp1);
    for(int i = 1; i <= 6; i++)
        dp[0][i] = 1;
    for(int l = 1; l <= q; l++)
    {
        for(int i = ncurr; i <= v[l].n - 1; i++)
            for(int j = 1; j <= 6 * NMAX + 1; j++)
                for(int f = 1; f <= 6; f++)
                    if(j > f)
                        dp[i % 2][j] = (dp[i % 2][j] + dp[(i - 1) % 2][j - f]) % MOD;
        if(v[l].n == v[l - 1].n)
            v[l].s = (MOD + rez[v[l].dr] - rez[v[l].st - 1]) % MOD;
        else{
        for(int i = 1; i <= 6 * NMAX + 1; i++)
            rez[i] = dp[(v[l].n - 1) % 2][i];
        for(int i = 1; i <= 6 * NMAX + 1; i++)
            rez[i] = (rez[i - 1] + rez[i]) % MOD;
        v[l].s = (MOD + rez[v[l].dr] - rez[v[l].st - 1]) % MOD;
        ncurr = v[l].n;
        }
    }
    sort(v + 1, v + q + 1, comp2);
    for(int i = 1; i <= q; i++)
        fout << v[i].s << '\n';

    return 0;
}
*/
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

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

int n, d[101][101], inf = 999999999;

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            fin >> d[i][j];
            if(d[i][j] == 0)
                d[i][j] = inf;
        }
    }
    for(int i = 1; i <= n; i++)
        d[i][i] = 0;
    for(int k = 1; k <= n; k++)
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= n; j++)
            {
                if(d[i][k] + d[k][j] < d[i][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)
                fout << "0 ";
            else fout << d[i][j] << " ";
        }
        fout << '\n';
    }


    return 0;
}