Pagini recente » Rating Gabriel Borlea (gabiborlea) | Statistici Savu Ilie-Tudor (tudor.savu) | Profil sebastian.scinteie | Monitorul de evaluare | Cod sursa (job #2247148)
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
#define infinit (1<<30)
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int main()
{
int n, m , *tata, *costuri;
bool *vizitat;
priority_queue<pair<int,int>, vector<pair<int,int> >, greater<pair<int,int> > > pq;
vector<pair<int,int> > *adiacenta;
fin >> n >> m;
adiacenta = new vector<pair<int,int> >[n+1];
vizitat = new bool[n+1]();
tata = new int[n+1]();
costuri = new int[n+1];
for(int i = 1 ; i <= n ; i++){
pq.push(make_pair(infinit,i));
costuri[i] = infinit;
}
for(int i = 0 ; i < m ; i++){
int x,y,cost;
fin >> x >> y >> cost;
adiacenta[x].push_back(make_pair(cost,y));
adiacenta[y].push_back(make_pair(cost,x));
}
//fin >> start >> destinatie;
costuri[1] = 0;
pq.push(make_pair(0, 1));
while(!pq.empty()){
int nod_curent = pq.top().second;
vizitat[nod_curent] = 1;
for(int i = 0 ; i < adiacenta[nod_curent].size() ; i++){
if(vizitat[adiacenta[nod_curent][i].second] == 0 && pq.top().first + adiacenta[nod_curent][i].first < costuri[adiacenta[nod_curent][i].second]){
tata[adiacenta[nod_curent][i].second] = nod_curent;
costuri[adiacenta[nod_curent][i].second] = pq.top().first + adiacenta[nod_curent][i].first;
pq.push(make_pair(costuri[adiacenta[nod_curent][i].second], adiacenta[nod_curent][i].second));
}
}
pq.pop();
}
for(int i = 2 ; i <= n ; i++)
fout << costuri[i] << ' ';
return 0;
}