Cod sursa(job #1361238)

Utilizator bilbor987Bogdan Pocol bilbor987 Data 25 februarie 2015 20:18:09
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 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 Read()
{
	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++)
				{
					int Vecin = G[Nod][j].first;
					int  Cost = G[Nod][j].second;
					D[Vecin] = min (D[Vecin], D[Nod] + Cost);
				}
		}
}

void Print()
{

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()
{
    Read();
    Dijkstra();
    Print();
    return 0;
}