Cod sursa(job #655390)

Utilizator d.andreiDiaconeasa Andrei d.andrei Data 2 ianuarie 2012 14:28:26
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>
#include <cstring>

#define file_in "royfloyd.in"
#define file_out "royfloyd.out"

#define nmax 111

int N,M;
int d[nmax];
int x[nmax*nmax];
int y[nmax*nmax];
int z[nmax*nmax];
int c,viz[nmax];
int i,j,nod;

int main(){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d", &N);
	M=0;
	for (i=1;i<=N;++i)
		 for (j=1;j<=N;++j){
			 scanf("%d", &c);
			 //muchia i->j cu costu c
			 if (i!=j){
				 x[++M]=i;
				 y[M]=j;
				 z[M]=c;
			 }
		 }
			 
	for (nod=1;nod<=N;++nod){
		
		 for (i=1;i<=N;++i) viz[i]=0;
		 for (i=1;i<=N;++i) d[i]=0x3f3f3f3f;
		 d[nod]=0;
		 
		 int ok=0;
		 
		 while(!ok){
			 ok=1;
			 for (i=1;i<=M;++i)
				  if (d[y[i]]>d[x[i]]+z[i])
					  d[y[i]]=d[x[i]]+z[i],
					  ok=0;
		 }
		 
		 for (i=1;i<=N;++i)
			  if (d[i]==0x3f3f3f3f)
				  d[i]=0;
	     for (i=1;i<=N;++i)
			  printf("%d ", d[i]);
		 printf("\n");
	}
	
	return 0;
	
}