Pagini recente » Cod sursa (job #1684882) | Cod sursa (job #2830269) | Cod sursa (job #1464819) | Cod sursa (job #2762289) | Cod sursa (job #2125155)
#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;
queue<int> coada;
int visited[SIZE_N] = {0};
inStream >> n >> m;
for(int i = 0; i < m; i++) {
inStream >> nodA >> nodB >> cost;
//matriceCosturi[nodA][nodB] = cost;
listaAdiacenta[nodA].push_back(make_pair(nodB, cost));
}
for(int i = 2; i <= n; i++) d[i] = INF;
d[1] = 0;
coada.push(1);
//cout << "merge";
while(!coada.empty()) {
int nod = coada.front();
coada.pop();
// cout << coada.size() << endl;
for(int i = 0; i < listaAdiacenta[nod].size(); i++) {
if(d[ listaAdiacenta[nod][i].first ] > listaAdiacenta[nod][i].second + d[nod]) {
coada.push(listaAdiacenta[nod][i].first);
d[ listaAdiacenta[nod][i].first ] = listaAdiacenta[nod][i].second + d[nod];
}
}
}
/*for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
cout << matriceCosturi[i][j] << " ";
}
cout << endl;
}*/
for(int i = 2; i <= n; i++) {
outStream << ((d[i] == INF)?0:d[i]) << " ";
}
return 0;
}