Cod sursa(job #974850)

Utilizator andrettiAndretti Naiden andretti Data 18 iulie 2013 15:21:27
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<stdio.h>
#define maxn 105
#define inf 0x3f3f3f3f
using namespace std;

int n;
int a[maxn][maxn];

void read()
{
    int i,j;

    scanf("%d",&n);
    for(i=1;i<=n;i++)
     for(j=1;j<=n;j++)
     {
         scanf("%d",&a[i][j]);
         if(a[i][j]==0 && i!=j) a[i][j]=inf;
     }
}

void roy()
{
    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]!=inf && a[k][j]!=inf && i!=j)
        if(a[i][k]+a[k][j]<a[i][j])
         a[i][j]=a[i][k]+a[k][j];
}

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

int main()
{
    freopen("royfloyd.in","r",stdin);
    freopen("royfloyd.out","w",stdout);

    read();
    roy();
    print();

    fclose(stdin);
    fclose(stdout);
    return 0;
}