Pagini recente » Cod sursa (job #48015) | Cod sursa (job #2951065) | Cod sursa (job #2438977) | Cod sursa (job #2374203) | Cod sursa (job #2711162)
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
// Algoritmul lui Dijkstra
struct Nod {
int val;
int lg;
Nod(int v, int l) {
val = v;
lg = l;
}
bool operator <(const Nod& n) const {
return n.lg < lg;
}
};
void parcurge(int index, int distance, vector<priority_queue<Nod>> &noduri, vector<int> &minim) {
if (minim[index] < 0 || distance < minim[index]) {
minim[index] = distance;
for (priority_queue<Nod> nd = noduri[index]; nd.size(); nd.pop())
parcurge(nd.top().val, distance + nd.top().lg, noduri, minim);
}
}
int main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int n, m, x, y, lg;
scanf("%d %d", &n, &m);
vector<priority_queue<Nod>> noduri(n + 1);
vector<int> minim(n + 1, -1);
while (m--) {
scanf("%d %d %d", &x, &y, &lg);
noduri[x].push(Nod(y, lg));
noduri[y].push(Nod(x, lg));
}
parcurge(1, 0, noduri, minim);
for (x = 2; x <= n; x++)
printf("%d ", minim[x]);
return 0;
}