Pagini recente » Cod sursa (job #2278430) | Cod sursa (job #940957) | Cod sursa (job #1831028) | Cod sursa (job #625940) | Cod sursa (job #1981807)
#include <fstream>
#include <queue>
#include <vector>
#define INF 1000000000
using namespace std;
struct arc
{
int dest,cost;
arc()
{
}
arc(int a, int b)
{
dest=a;
cost=b;
}
bool operator <(const arc &a) const
{
if (cost<a.cost)
return 1;
return 0;
}
};
ifstream fi("dijkstra.in");
ofstream fo("dijkstra.out");
int n,m,i;
int a,b,c;
vector <arc> V[50001];
vector <arc> :: iterator it;
int D[50001];
int S[50001];
priority_queue <arc> H;
arc curent,vecin;
int v;
int main()
{
fi>>n>>m;
for (i=1;i<=m;i++)
{
fi>>a>>b>>c;
V[a].push_back(arc(b,c));
}
for (i=2;i<=n;i++)
D[i]=INF;
D[0]=0;
for (i=2;i<=n;i++)
S[i]=0;
S[1]=1;
H.push(arc(1,0));
while (!H.empty())
{
curent=H.top();
H.pop();
v=curent.dest;
for (it=V[v].begin();it!=V[v].end();it++)
{
vecin=(*it);
if (D[v]+vecin.cost<D[vecin.dest])
{
D[vecin.dest]=D[v]+vecin.cost;
H.push(arc(vecin.dest,D[vecin.dest]));
}
}
S[v]=1;
}
for (i=2;i<=n;i++)
if (S[i]==0)
fo<<0<<" ";
else
fo<<D[i]<<" ";
fi.close();
fo.close();
return 0;
}