Cod sursa(job #159722)

Utilizator sealTudose Vlad seal Data 14 martie 2008 12:37:34
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<stdio.h>
#define Nm 101
#define Inf (1<<20)
#define min(a,b) ((a)<(b)?(a):(b))
int A[Nm][Nm],n;

void read()
{
    int i,j;

    freopen("royfloyd.in","r",stdin);
    scanf("%d",&n);
    for(i=0;i<n;++i)
        for(j=0;j<n;++j)
        {
            scanf("%d",&A[i][j]);
            if(!A[i][j] && i!=j)
                A[i][j]=Inf;
        }
}

void solve()
{
    int i,j,k;

    for(k=0;k<n;++k)
        for(i=0;i<n;++i)
            for(j=0;j<n;++j)
                A[i][j]=min(A[i][j],A[i][k]+A[k][j]);
}

void write()
{
    int i,j;

    freopen("royfloyd.out","w",stdout);
    for(i=0;i<n;++i)
    {
        for(j=0;j<n-1;++j)
            printf("%d ",A[i][j]<Inf?A[i][j]:0);
        printf("%d\n",A[i][j]<Inf?A[i][j]:0);
    }
}

int main()
{
    read();
    solve();
    write();
    return 0;
}