Cod sursa(job #256032)

Utilizator andr33aradu ioana andr33a Data 10 februarie 2009 23:40:39
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream.h>
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const long inf=32000;
long m;
long d[50002],viz[50002],n,min;
struct lista
{
	int nod,cost;
	lista *urm;
}*a[50002];
void add(int x,int y,int z)
{
	lista *q=new lista;
	q->nod=y;
	q->cost=z;
	q->urm=a[x];
	a[x]=q;
}
void citire()
{
	f>>n>>m;
	int x,y,z;
	for(long i=1;i<=m;i++)
	{
		if(i<=n)
		d[i]=inf;
		f>>x>>y>>z;
		add(x,y,z);
	}
}
void gasit(int i,int j)
{
	lista *q=a[i];
	int y=32000,gata=0;
	while(q&&!gata)
	{
		if(q->nod==j)
		{
			gata=1;
			y=q->cost;
		}
		q=q->urm;
	}
	if(gasit&&d[j]>d[i]+y)
		d[j]=d[i]+y;
}

void dij()
{
	int x; lista *q;
	q=a[1];
	while(q)
	{
		d[q->nod]=q->cost;
		q=q->urm;

	}
	d[1]=0;
	viz[1]=1;
	for(int i=2;i<=n;i++)
	{
		min=32000;
		for(int j=2;j<=n;j++)
		{
			if(min>d[j]&&viz[j]==0)
			{
				min=d[j];
				x=j;
			}
		}
		viz[x]=1;
		for(j=2;j<=n;j++)
		{

			if(viz[j]==0)
			{
				gasit(x,j);
			}
		}
	}
}
void main()
{
	citire();
	dij();
	for(int i=2;i<=n;i++)
		g<<d[i]<<" ";
g.close();
}