Cod sursa(job #1361784)

Utilizator japjappedulapPotra Vlad japjappedulap Data 25 februarie 2015 23:42:12
Problema Floyd-Warshall/Roy-Floyd Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
using namespace std;

ifstream is ("royfloyd.in");
ofstream os ("royfloyd.out");

int N;
int A[101][101], Ax[101][101];

int main()
{
    is >> N;
    for (int i = 1; i <= N; ++i)
        for (int j = 1; j <= N; ++j)
            is >> A[i][j], Ax[i][j] = A[i][j];

    for (int k = 1; k <= N; ++k)
        for (int i = 1; i <= N; ++i)
            for (int j = 1; j <= N; ++j)
                if ((A[i][j] > A[i][k] + A[k][j] || A[i][j] == 0) && i != j && i != k && j != k && A[i][k] && A[k][j])
                    A[i][j] = A[i][k] + A[k][j];



    for (int i = 1; i <= N; ++i)
        for (int j = 1; j <= N; ++j)
            for (int k = 1; k <= N; ++k)
                if ((Ax[i][j] > Ax[i][k] + Ax[k][j] || Ax[i][j] == 0) && i != j && i != k && j != k && Ax[i][k] && Ax[k][j])
                    Ax[i][j] = Ax[i][k] + Ax[k][j];

    /*for (int i = 1; i <= N; ++i, os << '\n')
        for (int j = 1; j <= N; ++j)
            os << A[i][j] << ' ';
    os << '\n';*/
    for (int i = 1; i <= N; ++i, os << '\n')
        for (int j = 1; j <= N; ++j)
            os << Ax[i][j] << ' ';

    is.close();
    os.close();
}