Cod sursa(job #199631)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 19 iulie 2008 22:04:55
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <stdio.h>

#define NMAX 50
#define FIN "royfloyd.in"
#define FOUT "royfloyd.out"

int N;
int A[NMAX][NMAX];

void citire()
{
int i,j;

freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);

scanf("%d", &N);

for (i=1;i<=N;i++)
    for (j=1;j<=N;j++)
	  scanf("%d", &A[i][j]);
}

void rf()
{
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 afisare()
{
int i,j;

for (i=1;i<=N;i++)
    {
    for (j=1;j<=N;j++)
	printf("%d ", A[i][j]);
	printf("\n");
	}
}

int main()
{
citire();
rf();
afisare();
return 0;
}