Pagini recente » Cod sursa (job #897247) | Cod sursa (job #945581) | Cod sursa (job #1312825) | Cod sursa (job #1624088) | Cod sursa (job #1095044)
#include <fstream>
#include <vector>
#define NMAX 50010
using namespace std;
int Distance[NMAX],N,M;
bool Selected[NMAX];
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
vector< pair<int, int> > G[NMAX];
void init(){
for (int i = 2; i <= N; i++) {
Distance[i] = 2000000000;
}
}
void Read(){
f>>N>>M;
for (int i = 1; i <= M; i++) {
/*
x,y - nodurile intre care avem legaturi
c - cost
*/
int x,y,c; f>>x>>y>>c;
G[x].push_back(make_pair(y, c));
}
}
void Dijkstra(){
for (int i = 1 ; i <= N; i++) {
int Nod,Min = 2000000000;
for (int j = 1; j <= N; j++) {
if (Distance[j] < Min && Selected[j] == 0) {
Min = Distance[j];
Selected[j] = 1;
Nod = j;
}
}
for (int k = 0; k < G[Nod].size(); k++) {
int Vecin = G[Nod][k].first, Cost = G[Nod][k].second;
if(Distance[Vecin] > Distance[Nod] + Cost){
Distance[Vecin] = Distance[Nod] + Cost;
}
}
}
}
void Write(){
for (int i = 2; i <= N; i++) {
g<<Distance[i]<<" ";
}
}
int main()
{
Read();
init();
Dijkstra();
Write();
return 0;
}