Pagini recente » Cod sursa (job #2223899) | Cod sursa (job #781460) | Cod sursa (job #54557) | Cod sursa (job #2843443) | Cod sursa (job #2710257)
#include <iostream>
#include <vector>
#include <list>
using namespace std;
// Algoritmul lui Dijkstra
struct Nod {
int val;
int lg;
Nod(int v, int l) {
val = v;
lg = l;
}
operator int() { return lg; }
};
void parcurge(int index, int distance, vector<list<Nod>> &noduri, vector<int> &minim) {
if (minim[index] < 0 || distance < minim[index]) {
minim[index] = distance;
for (list<Nod>::iterator it = noduri[index].begin(); it != noduri[index].end(); it++)
parcurge(it->val, distance + it->lg, noduri, minim);
}
}
int main() {
freopen("dijkstra.in", "r", stdin);
//freopen("dijkstra.out", "w", stdout);
int n, m, x, y, lg;
cin >> n >> m;
vector<list<Nod>> noduri(n + 1);
vector<int> minim(n + 1, -1);
while (m--) {
cin >> x >> y >> lg;
noduri[x].push_back(Nod(y, lg));
noduri[y].push_back(Nod(x, lg));
}
for (x = 1; x <= n; x++)
noduri[x].sort();
parcurge(1, 0, noduri, minim);
for (x = 2; x < minim.size(); x++)
cout << minim[x] << ' ';
return 0;
}