Pagini recente » Cod sursa (job #1739868) | Istoria paginii runda/pre2 | Cod sursa (job #1333896) | Cod sursa (job #2792889) | Cod sursa (job #771263)
Cod sursa(job #771263)
/*
Dijkstra.
*/
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <stdio.h>
#include <limits.h>
#define MAXN 50050
using namespace std;
int nr_noduri, nr_muchii;
vector< pair <int, int> > graf[MAXN];
queue<int> coada;
int drum[MAXN];
bool marcat[MAXN];
void drum_min () {
int i;
for (i = 1; i <= MAXN; i++)
drum[i] = INT_MAX;
drum[1] = 0;
coada.push(1);
marcat[1] = true;
while (!coada.empty()) {
int u = coada.front();
coada.pop();
marcat[u] = false;
vector< pair<int, int> >::iterator v = graf[u].begin();
while (v != graf[u].end()) {
if (drum[u] + v->second < drum[v->first]) {
drum[v->first] = drum[u] + v->second;
if (!marcat[v->first]) {
coada.push(v->first);
marcat[v->first] = true;
}
}
v++;
}
}
}
int main () {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int i, x, y, z;
scanf("%d %d", &nr_noduri, &nr_muchii);
for (i = 0; i < nr_muchii; i++) {
scanf("%d %d %d", &x, &y, &z);
graf[x].push_back(make_pair(y, z));
}
drum_min();
for (i = 2; i <= nr_noduri; i++)
if (drum[i] < INT_MAX)
printf("%d ", drum[i]);
else
printf("0 ");
return 0;
}