Cod sursa(job #1359960)

Utilizator bditmCatalin bditm Data 25 februarie 2015 10:19:20
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <vector>
#define NMax 50005
#define oo 2000000000
using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

vector< pair<int,int> > G[NMax];

int N,M;
int D[NMax], S[NMax];

void citeste()
{
	fin>>N>>M;
	for(int i=1;i<=M;i++)
	{
		int x,y,c;
		fin>>x>>y>>c;
		G[x].push_back(make_pair(y,c));
	}
}

void Dijkstra()
{
	for(int i=2;i<=N;i++)
		D[i] = oo;
  for(int i=1;i<=N;i++)
		{
			int Min = oo,Nod;
			for(int j=1;j<=N;j++)
				if(D[j]<Min && S[j]==0)
					{
					Min = D[j];
					Nod = j;
					}
		  S[Nod] = 1;
		  for(int j = 0; j<(int)G[Nod].size();j++)
				{
					D[G[Nod][j].first] = min (D[G[Nod][j].first], D[Nod] + G[Nod][j].second);
				}
		}
}

void afisare()
{

for(int i=2;i<=N;i++)
	if(D[i]==oo)
		D[i] = 0;

for(int i=2; i<=N; i++)
	fout<<D[i]<<" ";
fout<<"\n";

}

int main()
{
    citeste();
    Dijkstra();
    afisare();
    return 0;
}