Pagini recente » Cod sursa (job #151339) | Cod sursa (job #2751341) | Cod sursa (job #1295348) | Cod sursa (job #2684808) | Cod sursa (job #2861785)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int vegtelen=100000;
int n,m;
int d[50001];
bool elemeAzOptSornak[50001]={0};
vector < pair<int,int> > graf[50001];
struct osszehasonlitas
{
bool operator()(int x, int y)
{
return d[x]>d[y];
}
};
priority_queue <int, vector<int>, osszehasonlitas> optimalizalandoElemek;
void beolvas()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int a,b,c;
fin>>a>>b>>c;
graf[a].push_back(make_pair(b,c));
graf[b].push_back(make_pair(a,c));
}
fin.close();
}
void dijkstra(int kezdoCsucs)
{
for(int i=1;i<=n;i++)
{
d[i]=vegtelen;
}
d[kezdoCsucs]=0;
optimalizalandoElemek.push(kezdoCsucs);
elemeAzOptSornak[kezdoCsucs]=true;
while(!optimalizalandoElemek.empty())
{
int csucs=optimalizalandoElemek.top();
optimalizalandoElemek.pop();
elemeAzOptSornak[csucs]=false;
for(size_t i=0;i<graf[csucs].size();i++)
{
int szomszed=graf[csucs][i].first;
int tavolsag=graf[csucs][i].second;
if(d[csucs]+tavolsag<d[szomszed])
{
d[szomszed]=d[csucs]+tavolsag;
if(!elemeAzOptSornak[szomszed])
{
optimalizalandoElemek.push(szomszed);
elemeAzOptSornak[szomszed]=1;
}
}
}
}
}
void kiir()
{
for(int i=2;i<=n;i++)
{
if(d[i]!=vegtelen)
fout<<i<<" "<<d[i]<<endl;
else
fout<<"x ";
}
fout.close();
}
int main()
{
beolvas();
dijkstra(1);
kiir();
return 0;
}