Pagini recente » Cod sursa (job #880218) | Cod sursa (job #2536679) | Cod sursa (job #558470) | Cod sursa (job #911761) | Cod sursa (job #2862729)
#include <iostream>
#include <fstream>
#include <queue>
#include <utility>
#include <vector>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m;
const int oo = (1 << 30);
const int NMax=50005;
vector< pair <int,int> > G[NMax];
bool Jart[NMax];
int D[NMax];
struct rendezes{
bool operator()(int x,int y)
{
return D[x] > D[y];
}
};
priority_queue <int , vector<int> , rendezes> Sor;
void beolvas()
{
int a,b,c;
f>>n>>m;
for(int i=1;i<=m;i++)
{
f>>a>>b>>c;
G[a].push_back(make_pair(b,c));
G[b].push_back(make_pair(a,c));
}
}
void kiir()
{
for(int i=2;i<=n;i++)
{
if(D[i] == oo)
{
g<<0<<" ";
}
else g<<D[i]<<" ";
}
}
void dijkstra(int KezdoCsucs)
{
for(int i=1;i<=n;i++)
{
D[i]=oo;
}
D[KezdoCsucs] = 0;
Jart[KezdoCsucs] = true;
Sor.push(KezdoCsucs);
while(!Sor.empty())
{
int JelenlegiCsucs = Sor.top();
Sor.pop();
Jart[JelenlegiCsucs] = false;
for(size_t i = 0;i < G[JelenlegiCsucs].size();i++)
{
int Szomszed = G[JelenlegiCsucs][i].first;
int Ertek = G[JelenlegiCsucs][i].second;
if(D[JelenlegiCsucs]+Ertek < D[Szomszed])
{
D[Szomszed] = D[JelenlegiCsucs]+Ertek;
if(Jart[Szomszed] == false)
{
Sor.push(Szomszed);
Jart[Szomszed] = true;
}
}
}
}
}
int main()
{
beolvas();
dijkstra(1);
kiir();
return 0;
}