Pagini recente » Cod sursa (job #1205711) | Cod sursa (job #2165217) | Cod sursa (job #1201363) | Cod sursa (job #234604) | Cod sursa (job #2873480)
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 50001
#define oo 100001
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
int n,m,i,j;
int p;
int x,y,z;
vector <pair <int, int> > G[NMAX];
long long D[NMAX];
void Citire()
{
cin >> n >> m;
for (i = 1 ; i <= m ; i ++)
{
cin >> x >> y >> z;
G[x].push_back(make_pair (y,z));
}
for (i = 1; i <= m; i ++)
D[i] = oo;
}
struct compara
{
bool operator() (int x, int y)
{
return D[x] > D[y];
}
};
bool InCoada[NMAX];
priority_queue <int, vector <int>, compara> Coada;
void Dijkstra(int nodStart)
{
D[nodStart] = 0;
InCoada[nodStart] = 1;
Coada.push(nodStart);
while (!Coada.empty())
{
nodStart = Coada.top();
InCoada[nodStart] = 0;
for (i = 0; i < G[nodStart].size(); i ++)
{
int Vecin = G[nodStart][i].first;
int Cost = G[nodStart][i].second;
if (D[Vecin] > D[nodStart] + Cost)
{
D[Vecin] = D[nodStart] + Cost;
if (!InCoada[Vecin])
{
InCoada[Vecin] = true;
Coada.push(Vecin);
}
}
}
Coada.pop();
}
}
void Afisare()
{
for (i = 2; i <= n; i ++)
if (D[i] == 100001) cout << 0 << ' ';
else cout << D[i] << ' ';
}
int main()
{
Citire();
Dijkstra(1);
Afisare();
}