Cod sursa(job #987806)

Utilizator Anca_PaneaPanea Anca Anca_Panea Data 21 august 2013 15:34:10
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
using namespace std;
#include<fstream>
#include<vector>
ifstream eu("dijkstra.in");
ofstream tu("dijkstra.out");
#define Nmax 50005
# define oo 1<<30
vector< pair <int , int> > G[Nmax];
int D[Nmax],S[Nmax],N,M;
void read()
{
	eu>>N;
	eu>>M;
	int a,b,c;
	for(int i=1;i<=M;i++)
	{
		eu>>a>>b>>c;
		G[a].push_back(make_pair(b,c));
	}
}
void solve()
{
	vector< pair <int,int> > :: iterator it;
	int poz,min;
	for(int i=2;i<=N;i++)
		D[i]=oo;
	for(int j=1;j<=N-1;j++)
	{
		min=oo;
		poz=1;
		for(int i=2;i<=N;i++)
			if(D[i]<min&&S[i]!=1)
			{
				min=D[i];
				poz=i;
			}
		S[poz]=1;
		for(it=G[poz].begin();it!=G[poz].end();it++)
			if(D[it->first]>D[poz]+it->second)
				D[it->first]=D[poz]+it->second;
	}
}
void print()
{
	for(int i=2;i<=N;i++)
		if(D[i]==oo)
			tu<<0<<" ";
		else
		tu<<D[i]<<" ";
}

int main()
{
	read();
	solve();
	print();
	return 0;
}