Pagini recente » Cod sursa (job #152763) | Cod sursa (job #2090275) | Cod sursa (job #2703888) | Cod sursa (job #3030676) | Cod sursa (job #1856600)
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
#define w 50001
using namespace std;
struct nod{int c,v;};
class prio
{
public:
bool operator ()(nod &p1 ,nod&p2)
{
return p1.c>p2.c;
}
};
priority_queue <nod, vector <nod>, prio> q;
vector <nod> a[w];
int d[w];
void dij()
{
nod t,r,rr;int i;
while (!q.empty())
{
t=q.top();
q.pop();
for (i=0;i<a[t.v].size();i++)
{
r=a[t.v][i];
if (d[r.v]>d[t.v]+r.c)
{
d[r.v]=d[t.v]+r.c;
rr.v=r.v;rr.c=d[r.v];
q.push(rr);
}
}
}
}
int main()
{
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,i,m,x,y,cost;
f>>n>>m;
nod t;
for (i=1;i<=m;i++)
{
f>>x>>y>>cost;
t.v=y;t.c=cost;
a[x].push_back(t);
}
for (i=2;i<=n;i++) d[i]=INT_MAX;
t.c=0;t.v=1;
q.push(t);
dij();
for (i=2;i<=n;i++)
{
if (d[i]==INT_MAX) g<<"0 ";
else g<<d[i]<<" ";
}
g<<'\n';
f.close();
g.close();
return 0;
}