Cod sursa(job #495644)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 26 octombrie 2010 11:45:51
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<cstdio>

using namespace std;

struct NodGR
{
	int inf,pd;
	struct NodGR* next;
};

typedef NodGR* NGR;

NGR a[50001];
int viz[50001],C[500001],N,M,i;

void read();
void solve();
void adaug(int x,int y,int p);
void DJK(int x);

int main()
{
	freopen ("dijkstra.in","r",stdin);
	freopen ("dijkstra.out","w",stdout);
	read();
	for (i=1;i<=N;viz[i++]=50000001);
	DJK(1);
	for (i=2;i<=N;++i)
	{
		if (viz[i]==50000001) viz[i]=0;
		printf("%ld ",viz[i]);
	}
	return 0;
}

void adaug(int x,int y,int p)
{
	NGR q=new NodGR;
	q->inf=y;
	q->pd=p;
	q->next=a[x];
	a[x]=q;
}

void read()
{
	int x,y,p;
	scanf("%ld%ld",&N,&M);
	for (i=1;i<=M;++i)
	{
		scanf("%ld%ld%ld",&x,&y,&p);
		adaug(x,y,p);
	}
}

void DJK(int x)
{
	NGR i;
	int p,u,z;
	p=u=1;
	C[p]=x;
	viz[x]=0;
	while (p<=u)
	{
		z=C[p++];
		for (i=a[z];i;i=i->next)
			if (viz[i->inf]>viz[z]+i->pd)
			{
				C[++u]=i->inf;
				viz[i->inf]=viz[z]+i->pd;
			}
	}
}