Pagini recente » Cod sursa (job #1383204) | Cod sursa (job #1383331) | Cod sursa (job #1383977) | Cod sursa (job #2540287) | Cod sursa (job #2542340)
#include <iostream>
#include <fstream>
#include <queue>
#define N 50005
#define oo (1 << 31)-1
using namespace std;
ifstream x("dijkstra.in");
ofstream y("dijkstra.out");
int n,m;
int d[N];
bool c[N];
vector < pair < int, int > > g[N];
struct CD
{
bool operator()(int a,int b)
{
return d[a]>d[b];
}
};
priority_queue < int, vector <int>, CD> coada;
void citire()
{
x>>n>>m;
int st,dr,lg;
for(int i=1;i<=m;i++)
{
x>>st>>dr>>lg;
g[st].push_back(make_pair(dr,lg));
}
}
void dijk(int nod)
{
for(int i=1;i<=n;i++)
d[i]=oo;
d[nod]=0;
coada.push(nod);
c[nod]=true;
while(!coada.empty())
{
int nodc=coada.top();
coada.pop();
c[nodc]=false;
for(size_t i=0; i<g[nodc].size(); i++)
{
int vec=g[nodc][i].first;
int cost=g[nodc][i].second;
if(d[nodc]+cost<d[vec])
{
d[vec]=d[nodc]+cost;
if(c[vec]==false)
{
coada.push(vec);
c[vec]=true;
}
}
}
}
}
void afis()
{
for(int i=2;i<=n;i++)
{
if(d[i]!=oo)
y<<d[i]<<" ";
else
y<<"0 ";
}
}
int main()
{
citire();
dijk(1);
afis();
x.close();
y.close();
return 0;
}