Pagini recente » Cod sursa (job #2335109) | Cod sursa (job #2533141) | Cod sursa (job #2122774) | Cod sursa (job #3132135) | Cod sursa (job #2125998)
#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 visited[SIZE_N] = {0};
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > coada;
inStream >> n >> m;
for(int i = 0; i < m; i++) {
int nodA, nodB, cost;
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(make_pair(0, 1));
while(!coada.empty()) {
int nod = coada.top().second;
coada.pop();
if(visited[nod] == 0){
visited[nod] = 1;
for(size_t i = 0; i < listaAdiacenta[nod].size(); i++) {
int next_nod = listaAdiacenta[nod][i].second;
int cost_next = listaAdiacenta[nod][i].first;
if( d[next_nod] > cost_next + d[nod]) {
d[next_nod] = cost_next + d[nod];
coada.push( make_pair(d[next_nod], next_nod) );
}
}
}
}
for(int i = 2; i <= n; i++) {
outStream << ((d[i] == INF)?0:d[i]) << " ";
}
return 0;
}