Pagini recente » Cod sursa (job #74824) | Cod sursa (job #2900231) | Cod sursa (job #1169240) | Cod sursa (job #3169690) | Cod sursa (job #1700028)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <utility>
#define NMAX 50001
#define INF 1000000000
using namespace std;
int N,M;
int s;
int d[NMAX];
vector < pair<int,int> > G[NMAX];
ofstream fout("dijkstra.out");
class Comparator{
public:
bool operator()(const int& x,const int& y)
{return d[x]>d[y];}
};
priority_queue<int, vector<int>, Comparator> PQ;
void dijkstra()
{
int vf,i;
for(i=1;i<=N;i++)
d[i]=INF;
d[s]=0;
PQ.push(s);
while(!PQ.empty())
{
vf=PQ.top();
PQ.pop();
for(i=0;i<G[vf].size();i++)//parcurg vecinii lui vf
if(d[G[vf][i].first]>d[vf]+G[vf][i].second)
{
d[G[vf][i].first]=d[vf]+G[vf][i].second;
PQ.push(G[vf][i].first);
}
}
}
int main()
{
int i,x,y,c;
ifstream fin("dijkstra.in");
fin>>N>>M>>s;
for(i=0;i<M;i++)
{
fin>>x>>y>>c;
G[x].push_back(make_pair(y,c));
}
fin.close();
dijkstra();
for(i=1;i<=N;i++)
if(i!=s)
{if(d[i]==INF) fout<<0<<" ";
else fout<<d[i]<<" ";}
fout.close();
return 0;
}