Pagini recente » Cod sursa (job #712285) | Cod sursa (job #1034193) | Cod sursa (job #257544) | Cod sursa (job #163414) | Cod sursa (job #2206720)
#include <bits/stdc++.h>
using namespace std;
struct semi{
int y,cost;
semi(int x,int b):y(x),cost(b){};
semi(){};
};
struct nod{
int et,dis;
nod(int x,int y):et(x),dis(y){};
bool operator<(const nod& x)const{
if(dis>x.dis )return true;
return false;
}
};
int main()
{
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int nr_noduri;
in>>nr_noduri;
int nr_arce;
in>>nr_arce;
vector<int> distante(nr_noduri+1,INT_MAX);
vector<vector<semi> >graf(nr_noduri+1,vector<semi>(0));
priority_queue<nod> heap;
vector<bool>folosit(nr_noduri+1,false);
for(int i=0;i<=nr_arce;i++){
int aux1,aux2,cost;
in>>aux1>>aux2>>cost;
graf[aux1].push_back(semi(aux2,cost));
}
heap.push(nod(1,0));
while(!heap.empty()){
nod aux=heap.top();
heap.pop();
if(folosit[aux.et])continue;
folosit[aux.et]=true;
for(unsigned int i=0;i<graf[aux.et].size();i++){
if(aux.dis+graf[aux.et][i].cost<distante[graf[aux.et][i].y]){
distante[graf[aux.et][i].y]=aux.dis+graf[aux.et][i].cost;
heap.push(nod(graf[aux.et][i].y,distante[graf[aux.et][i].y]));
}
}
}
for(int i=2;i<distante.size();i++){
out<<distante[i]<<' ';
}
in.close();
out.close();
return 0;
}