Cod sursa(job #374632)

Utilizator GotenAmza Catalin Goten Data 17 decembrie 2009 16:46:03
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<fstream.h>
#include<iostream.h>

long i,t,v[501000][3],n,m,d[51000],u,j,c,a,b,poz[51000],s,cur,viz[51000],mm,k;

int main()
{
	ifstream f("dijkstra.in");
	ofstream g("dijkstra.out");
	f>>n>>m;
	u=(1<<30);
	for(i=2;i<=n;i++)
		d[i]=u;
	for(i=1;i<=m;i++)
	{
		f>>a>>b>>c;
		v[++k][0]=b;
		v[k][1]=poz[a];
		v[k][2]=c;
		poz[a]=k;
		v[++k][0]=a;
		v[k][1]=poz[b];
		v[k][2]=c;
		poz[b]=k;
	}
	s=0;
	cur=1;
	while(s<n)
	{
		viz[cur]=1;
		s++;
		t=poz[cur];
		mm=v[t][0];
		while(t)
		{
			if(!viz[v[t][0]])
			{
				if(d[v[t][0]]>d[cur]+v[t][2])
					d[v[t][0]]=d[cur]+v[t][2];
				if(d[mm]>d[v[t][0]])
					mm=v[t][0];
			}
			t=v[t][1];
		}
		cur=mm;
	}
	for(i=2;i<=n;i++)
		g<<d[i]<<' ';
	return 0;
}