Cod sursa(job #603146)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 14 iulie 2011 19:41:21
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>

#define NMax 105

using namespace std;

int Cost[NMax][NMax], N;

void Read ()
{
    freopen ("royfloyd.in", "r", stdin);
    scanf ("%d", &N);
    for (int i=1; i<=N; ++i)
    {
        for (int j=1; j<=N; ++j)
        {
            scanf ("%d", &Cost[i][j]);
        }
    }
}

void Print ()
{
    freopen ("royfloyd.out", "w", stdout);
    for (int i=1; i<=N; ++i)
    {
        for (int j=1; j<=N; ++j)
        {
            printf ("%d ", Cost[i][j]);
        }
        printf ("\n");
    }
}

inline int Min (int a, int b)
{
    if (a<b)
    {
        return a;
    }
    return b;
}

void Floyd ()
{
    for (int k=1; k<=N; ++k)
    {
        for (int i=1; i<=N; ++i)
        {
            for (int j=1; j<=N; ++j)
            {
                if (Cost[i][k]==0 || Cost[k][j]==0 || i==j)
                {
                    continue;
                }
                if (Cost[i][j]==0)
                {
                    Cost[i][j]=Cost[i][k]+Cost[k][j];
                }
                Cost[i][j]=Min (Cost[i][j], Cost[i][k]+Cost[k][j]);
            }
        }
    }
}

int main()
{
    Read ();
    Floyd ();
    Print ();
    return 0;
}