Cod sursa(job #662973)

Utilizator federerUAIC-Padurariu-Cristian federer Data 17 ianuarie 2012 16:40:58
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
#include<vector>
#define Nmax 50001
#define Inf 1001
using namespace std;
vector< pair <int, int> > G[Nmax];
int a, b, n, m, i, cost, j;
int d[Nmax], viz[Nmax], Vfmin, Dmin;

void dijkstra()
{
	viz[1]=1;
	for(j=1;j<n;j++)
	{
		Dmin=Inf;
		for(i=2;i<=n;i++)
			if(!viz[i] && Dmin>d[i])
			{
				Dmin=d[i];
				Vfmin=i;
			}
		viz[Vfmin]=1;
		for(i=0;i<G[Vfmin].size();i++)
			if(!viz[G[Vfmin][i].first] && Dmin+G[Vfmin][i].second<d[G[Vfmin][i].first])
				d[G[Vfmin][i].first]=Dmin+G[Vfmin][i].second;
	}
}

int main()
{
	freopen("dijkstra.in", "r", stdin);
	freopen("dijkstra.out", "w", stdout);
	scanf("%d%d", &n, &m);
	for(i=1;i<=n;i++)
	{
		scanf("%d%d%d", &a, &b, &cost);
		G[a].push_back(make_pair(b, cost));
	}
	for(i=1;i<=n;i++)
		d[i]=Inf;
	for(i=0;i<G[1].size();i++)
		d[G[1][i].first]=G[1][i].second;
	dijkstra();
	for(i=2;i<=n;i++)
		printf("%d ", d[i]);
	printf("\n");
	fclose(stdin);
	fclose(stdout);
	return 0;
}