Cod sursa(job #303345)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 9 aprilie 2009 19:25:16
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdio>

using namespace std;

#define FIN "royfloyd.in"
#define FOUT "royfloyd.out"
#define Nmax 101

int n;
int a[Nmax][Nmax];

inline void citire()
{
	int i,j;
	
	freopen(FIN,"r",stdin);
	freopen(FOUT,"w",stdout);
	
	scanf("%d", &n);
	for (i=1;i<=n;++i)
		 for (j=1;j<=n;++j)
			  scanf("%d", &a[i][j]);
}

inline 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] && i!=j && (a[i][j]>a[i][k]+a[k][j] || a[i][j]==0))
						 a[i][j]=a[i][k]+a[k][j];
}

inline void scrie()
{
	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();
   scrie();
   
   fclose(stdin);
   fclose(stdout);
   
   return 0;
}