Cod sursa(job #396891)

Utilizator cristiprgPrigoana Cristian cristiprg Data 16 februarie 2010 00:37:13
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <cstdio>
#define DIM 105

int a[DIM][DIM], n;
const int INF = (1<<30);
int min(const int a, const int b)
{
    return a<b ? a : b;
}

void royfloyd()
{
    for (int k = 1; k <= n; ++k)
        for (int i = 1; i <= n; ++i)
            for (int j = 1; j <= n; ++j)
                a[i][j] = min(a[i][j], a[i][k] + a[k][j]);
}

int main()
{
    FILE *f = fopen("royfloyd.in", "r");
    fscanf(f, "%d", &n);
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= n; ++j)
        {
            fscanf (f, "%d", &a[i][j]);
            if (!a[i][j] && i != j)  a[i][j] = INF;
        }

    fclose(f);

royfloyd();
    f = fopen("royfloyd.out", "w");
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= n; ++j)
            fprintf (f, "%d ", a[i][j]==INF?0:a[i][j]);
        fprintf (f, "\n");
    }
    fclose(f);

    return 0;
}