Pagini recente » Cod sursa (job #1801676) | Cod sursa (job #2589352) | Cod sursa (job #2365436) | Cod sursa (job #1997234) | Cod sursa (job #3030101)
#include <fstream>
#include <vector>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
const int infinity = 1 << 30;
#define nMax 50005
int n,m;
vector <int> distanta(nMax);
vector <bool> inQueue(nMax);
vector <pair<int, int>> graf[nMax];
struct compare {
bool operator()(int x, int y) {
return distanta[x] > distanta[y];
}
};
priority_queue<int, vector<int>, compare> coada;
void dijkstra (int nodStart) {
for(int i = 1; i <= n; i++)
distanta[i] = infinity;
distanta[nodStart] = 0;
coada.push(nodStart);
inQueue[nodStart] = true;
while (!coada.empty()) {
int nodCurent = coada.top();
coada.pop();
inQueue[nodCurent] = false;
for(unsigned i = 0; i < graf[nodCurent].size(); i++) {
int vecin = graf[nodCurent][i].first;
int cost = graf[nodCurent][i].second;
if(distanta[nodCurent] + cost < distanta[vecin])
distanta[vecin] = distanta[nodCurent] + cost;
if(!inQueue[vecin]) {
coada.push(vecin);
inQueue[vecin] = true;
}
}
}
}
void show() {
ofstream out("dijkstra.out");
for(int i = 2; i <= n; i++) {
if (distanta[i] != infinity) {
out << distanta[i] << " ";
} else {
out << 0 << " ";
}
}
}
void read() {
ifstream in("dijkstra.in");
in >> n >> m;
for(int i = 1; i <= m; i++) {
int x,y,cost;
in >> x >> y >> cost;
graf[x].push_back(make_pair(y,cost));
}
}
int main() {
read();
dijkstra(1);
show();
return 0;
}