Cod sursa(job #915366)

Utilizator The_DisturbedBungiu Alexandru The_Disturbed Data 14 martie 2013 22:40:09
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<cstdio>
int m,n,i,j,k,d[101],nod;
struct graf
{
	int x,c;
	graf *y;
}*g[101],*w;
struct point
{
	int x;
	point *y;
}*p,*u,*q;
inline void intro(int x, int y, int z)
{
	graf *p=new graf;
	p->x=y;
	p->c=k;
	p->y=g[x];
	g[x]=p;
}
int main()
{
	freopen("royfloyd.in","r",stdin);
	freopen("royfloyd.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;++i)
		for(j=1;j<=n;++j)
		{
			scanf("%d",&k);
			if(k!=0)
			intro(i,j,k);
		}
	for(k=1;k<=n;++k)
	{
		for(i=1;i<=n;++i)d[i]=-1;
		d[k]=0;
		p=new point;
		p->x=k;
		p->y=NULL;
		u=p;
		while(p!=NULL)
		{
			nod=p->x;
			for(w=g[nod];w!=NULL;w=w->y)
				if(d[w->x]>d[nod]+w->c || d[w->x]==-1)
				{
					d[w->x]=d[nod]+w->c;
					q=new point;
					q->y=NULL;
					q->x=w->x;
					u->y=q;
					u=q;
				}
			q=p;
			p=p->y;
			delete(q);
		}
		for(i=1;i<=n;++i)
			if(d[i]==-1)printf("0 ");
		else printf("%d ",d[i]);
		printf("\n");
	}
	return 0;
}