Cod sursa(job #1591556)

Utilizator AndreiGrigorasAndrei Grigoras AndreiGrigoras Data 6 februarie 2016 13:36:10
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#define inf 1000000
using namespace std ;
int n, a[105][105];
void init()
{
    for ( int i = 1 ; i <= n ; i++ )
        for ( int j = 1 ; j <= n ; j++ )
            if ( i != j )
                a[i][j] = inf ;
}
void citire()
{
    freopen("royfloyd.in","r",stdin);
    freopen("royfloyd.out","w",stdout);

    int  i, j , n ;
    scanf("%d",&n);
    init() ;
    for (i = 1; i <= n; i++)
        for ( int j = 1 ; j <= n ; j++ )
            scanf ( "%d" , &a[i][j] ) ;
}

void roy_floyd()
{
    int i, j, k;
    for (k = 1; k <= n; k++)
        for (i = 1; i <= n; i++)
            for (j = 1; j <= n; j++)
                if (a[i][k] && a[k][j] && (a[i][j] > a[i][k] + a[k][j] || !a[i][j]) && i != j) a[i][j] = a[i][k] + a[k][j];
}

void afis()
{
    int i, j;
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n; j++)
        {
            if ( a[i][j] == inf )
                a[i][j] = -1 ;
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}


int main()
{
    citire();
    roy_floyd();
    afis();
    return 0;
}