Pagini recente » Cod sursa (job #1662088) | Cod sursa (job #2199375) | Cod sursa (job #891276) | Cod sursa (job #3250637) | Cod sursa (job #2776680)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct heapNode{
int nod, dist;
inline bool operator < (const heapNode &other) const
{
return dist > other.dist;
}
};
struct node{
int nod, cost;
};
const int maxN=50000;
int nr_noduri, nr_muchii, d[maxN+5];
vector <node> G[maxN+5];
priority_queue <heapNode> heap;
void citire()
{
fin>>nr_noduri>>nr_muchii;
for(int i=1; i<=nr_noduri; i++)
{
node a, b;
fin>>a.nod>>b.nod>>b.cost;
G[a.nod].push_back(b);
}
}
void dijkstra()
{
d[1]=0;
heapNode init;
init.nod=1;
init.dist=0;
heap.push(init);
while(!heap.empty())
{
heapNode poz=heap.top();
heap.pop();
for(int i=0; i<G[poz.nod].size(); i++)
{
node vecin=G[poz.nod][i];
heapNode next;
next.nod=vecin.nod;
if(poz.dist+vecin.cost < d[next.nod] || d[next.nod]==0)
{
next.dist=poz.dist+vecin.cost;
d[next.nod]=next.dist;
heap.push(next);
}
}
}
}
void afisare()
{
for(int i=2; i<=nr_noduri; i++)
fout<<d[i]<<' ';
}
int main()
{
citire();
dijkstra();
afisare();
return 0;
}