Pagini recente » Cod sursa (job #1647737) | Cod sursa (job #337141) | Cod sursa (job #846688) | Cod sursa (job #704985) | Cod sursa (job #2488368)
#include <iostream>
#include<fstream>
#include<bits/stdc++.h>
#include<string.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#define NMAX 50005
int n,m;
vector<pair<int,int> > ma[NMAX];
int dis[NMAX];
bool esteHeap[NMAX];
int oo = (1<<30);
struct compare
{
bool operator()(int x,int y)
{
return dis[x]>dis[y];
}
};
priority_queue<int,vector<int>,compare> heap;
void citire()
{
fin>>n>>m;
for(int i = 1;i<=m;i++)
{
int x,y,c;
fin>>x>>y>>c;
ma[x].push_back(make_pair(y,c));
}
}
void dijkstra(int nodStart)
{
for(int i = 1;i<=n;i++)
dis[i] = oo;
dis[nodStart] = 0;
heap.push(nodStart);
esteHeap[nodStart] = true;
while(!heap.empty())
{
int nod = heap.top();
heap.pop();
esteHeap[nod] = false;
for(int i = 0;i<ma[nod].size();i++)
{
int vecin = ma[nod][i].first;
int cost = ma[nod][i].second;
if(dis[vecin] > cost + dis[nod])
{
dis[vecin] = cost + dis[nod];
if(esteHeap[vecin]==false)
{
esteHeap[vecin] = true;
heap.push(vecin);
}
}
}
}
}
void afisare()
{
for(int i = 2;i<=n;i++)
{
if(dis[i]!=oo)
fout<<dis[i]<<" ";
else
fout<<"0 ";
}
}
int main()
{
citire();
dijkstra(1);
afisare();
return 0;
}