Pagini recente » Cod sursa (job #1620693) | Cod sursa (job #936105) | Cod sursa (job #2369137) | Cod sursa (job #92300) | Cod sursa (job #2714240)
#include <iostream>
#include <vector>
#include <bitset>
#include <queue>
using namespace std;
// Algoritmul lui Dijkstra
struct Nod {
int val;
int lg;
Nod(int value, int length) {
val = value;
lg = length;
}
bool operator <(const Nod& n) const {
return n.lg < lg;
}
};
int main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int n, m, x, y, lg;
scanf("%d %d", &n, &m);
vector<vector<Nod>> noduri(n + 1);
while (m--) {
scanf("%d %d %d", &x, &y, &lg);
noduri[x].push_back(Nod(y, lg));
noduri[y].push_back(Nod(x, lg));
}
priority_queue<Nod> deParcurs;
bitset<50010> parcurs;
vector<int> minim(n + 1, 1000000010);
deParcurs.push(Nod(1, 0));
minim[1] = 0;
while (deParcurs.size()) {
Nod from = deParcurs.top();
deParcurs.pop();
for (int i = 0; i < noduri[from.val].size() && !parcurs[from.val]; i++) {
Nod to = noduri[from.val][i];
if (to.lg + from.lg < minim[to.val]) {
minim[to.val] = from.lg + to.lg;
deParcurs.push(Nod(to.val, to.lg + from.lg));
}
}
parcurs[from.val] = 1;
}
for (x = 2; x <= n; x++)
printf("%d ", minim[x]);
return 0;
}