Pagini recente » Cod sursa (job #672768) | Cod sursa (job #268628) | Cod sursa (job #1546500) | Cod sursa (job #1761169) | Cod sursa (job #2717724)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
const int pinf=(1<<30);
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,m,rad,sel,vec,cost;
bool viz[100010];
int d[100010];
vector <pair <int,int> > g[100010];
struct compara
{
bool operator()(int x, int y)
{
return d[x]>d[y];
}
};
priority_queue <int, vector <int>, compara> q;
void citire()
{
int x,y,c,i;
fin>>n>>m;
for (i=1;i<=m;i++)
{
fin>>x>>y>>c;
g[x].push_back(make_pair(y,c));
g[y].push_back(make_pair(x,c));
}
}
void dijkstra(int rad)
{
int i;
for (i=1;i<=n;i++)
d[i]=pinf;
d[rad]=0;
q.push(rad);
viz[rad]=1;
while (!q.empty())
{
sel=q.top();
q.pop();
viz[sel]=0;
for (size_t i = 0;i < g[sel].size();i++)
{
vec=g[sel][i].first;
cost=g[sel][i].second;
if (d[sel]+cost<d[vec])
{
d[vec]=d[sel]+cost;
if (viz[vec]==0)
{
q.push(vec);
viz[vec]=1;
}
}
}
}
}
void afisare()
{
int i;
for (i=2;i<=n;i++)
if (d[i]==pinf)
fout<<0<<" ";
else
fout<<d[i]<<" ";
}
int main()
{
citire();
dijkstra(1);
afisare();
fin.close();
fout.close();
return 0;
}