Pagini recente » Cod sursa (job #2627883) | Cod sursa (job #2861183) | Cod sursa (job #1325032) | Cod sursa (job #1994245) | Cod sursa (job #2125161)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <utility>
#define INF 999999999
#define SIZE_N 50003
#define SIZE_M 501
using namespace std;
int main()
{
ifstream inStream("dijkstra.in");
ofstream outStream("dijkstra.out");
int d[SIZE_N];
int n, m;
vector< pair<int, int> > listaAdiacenta[SIZE_N];
int nodA, nodB, cost;
priority_queue<int, vector<int>, greater<int> > coada;
inStream >> n >> m;
for(int i = 0; i < m; i++) {
inStream >> nodA >> nodB >> cost;
listaAdiacenta[nodA].push_back(make_pair(cost, nodB));
}
for(int i = 2; i <= n; i++) d[i] = INF;
d[1] = 0;
coada.push(1);
while(!coada.empty()) {
int nod = coada.top();
coada.pop();
for(int i = 0; i < listaAdiacenta[nod].size(); i++) {
if(d[ listaAdiacenta[nod][i].second ] > listaAdiacenta[nod][i].first + d[nod]) {
coada.push(listaAdiacenta[nod][i].second);
d[ listaAdiacenta[nod][i].second ] = listaAdiacenta[nod][i].first + d[nod];
}
}
}
for(int i = 2; i <= n; i++) {
outStream << ((d[i] == INF)?0:d[i]) << " ";
}
return 0;
}