Pagini recente » Cod sursa (job #2187909) | Cod sursa (job #2306323) | Cod sursa (job #1101135) | Cod sursa (job #1605229) | Cod sursa (job #1095050)
#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];
Nod = j;
}
}
Selected[Nod] = 1;
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++) {
if (Distance[i] == 2000000000) {
g<<0<<" ";
}else{
g<<Distance[i]<<" ";
}
}
}
int main()
{
Read();
init();
Dijkstra();
Write();
return 0;
}