Pagini recente » Cod sursa (job #937391) | Cod sursa (job #605507) | Cod sursa (job #1389359) | Cod sursa (job #1870980) | Cod sursa (job #1706536)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
#define N_MAX 50000
#define INFINIT 0x3F3F3F3F
vector< pair<int, int> > ad[N_MAX + 1];
int distante[N_MAX + 1];
vector<bool> vizitat(N_MAX + 1);
bool cmpDistante(int a, int b);
void dijkstra(int start);
int main()
{
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n, m, x, y, c;
fin >> n >> m;
for(int i = 2; i <= n; ++i)
distante[i] = INFINIT;
for(int i = 1; i <= m; ++i){
fin >> x >> y >> c;
ad[x].push_back(make_pair(y, c));
}
dijkstra(1);
for(int i = 2; i <= n; ++i)
fout << ((distante[i] == INFINIT) ? 0 : distante[i]) << " ";
return 0;
}
void dijkstra(int start){
priority_queue<int, vector<int>, decltype(&cmpDistante)> q(&cmpDistante);
q.push(start);
distante[start] = 0;
vizitat[start] = true;
while(!q.empty()){
start = q.top();
q.pop();
for(auto vecin : ad[start]){
if(distante[vecin.first] > distante[start] + vecin.second){
distante[vecin.first] = distante[start] + vecin.second;
if(!vizitat[vecin.first]){
q.push(vecin.first);
vizitat[vecin.first] = true;
}
}
}
}
}
bool cmpDistante(int a, int b){
return distante[a] > distante[b];
}