Pagini recente » Cod sursa (job #996747) | Cod sursa (job #1778931) | Cod sursa (job #2296621) | Cod sursa (job #1662346) | Cod sursa (job #2056734)
#include <iostream>
#include <queue>
#include <vector>
#include <fstream>
#define INF 2000000000
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m;
struct nod{
int vecin;
int cost;
struct nod *urm;
}*l[100004],*actual;
int d[100004];
int minim;
bool viz[100004];
priority_queue<pair<int,int>, vector<pair<int,int> >, greater<pair<int,int> > >pq;
void dijkstra(int p)
{
for(int i=1;i<=n;i++)
d[i]=INF;
d[p]=0;
actual=l[p];
while(actual!=NULL)
{
d[actual->vecin]=actual->cost;
pq.push(make_pair(actual->cost,actual->vecin));
actual=actual->urm;
}
viz[p]=1;
while(pq.empty()==false)
{
minim=pq.top().second;
viz[minim]=1;
actual=l[minim];
while(actual!=NULL)
{
if(d[actual->vecin]>d[minim]+actual->cost&&viz[actual->vecin]==0)
{
d[actual->vecin]=d[minim]+actual->cost;
pq.push(make_pair(actual->cost,actual->vecin));
}
actual=actual->urm;
}
pq.pop();
}
}
int main()
{
int p;
f>>n>>m;
int x,y,c;
while(!f.eof())
{
f>>x>>y>>c;
actual=new nod;
actual->vecin=y;
actual->cost=c;
actual->urm=l[x];
l[x]=actual;
}
dijkstra(1);
for(int i=2;i<=n;i++)
if(d[i]==INF)
g<<"0 ";
else
g<<d[i]<<" ";
return 0;
}