Pagini recente » Cod sursa (job #3275260) | Cod sursa (job #695932) | Cod sursa (job #3224059) | Cod sursa (job #2574507) | Cod sursa (job #2301318)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int NMAX = 50002;
const int infinit = (1 <<30);
int n, m;
int d[NMAX];
bool viz[NMAX];
vector <pair <int, int > > muchii[NMAX];
struct compara
{
bool operator()(int x,int y)
{
return d[x] < d[y];
}
};
priority_queue < int, vector <int> , compara> coada;
void citeste()
{
fin >> n >> m;
for (int i = 1 ; i <= m; i++)
{
int x, y ,cost;
fin >> x >> y >> cost;
muchii[x].push_back(make_pair(y,cost));
}
}
void dijkstra(int NodStart)
{
viz[NodStart] = true;
for (int i = 1; i <= n; i++)
d[i] = infinit;
d[NodStart] = 0;
coada.push(NodStart);
while (!coada.empty())
{
int NodCurent = coada.top();
coada.pop();
viz[NodCurent] = false;
for (unsigned int i = 0;i < muchii[NodCurent].size(); i++)
{
int vecin = muchii[NodCurent][i].first;
int cost = muchii[NodCurent][i].second;
if (d[NodCurent] + cost < d[vecin])
{
d[vecin] = d[NodCurent] + cost;
if (viz[vecin] == false)
{
viz[vecin] = true;
coada.push(vecin);
}
}
}
}
}
void afiseaza()
{
for (int i = 2 ; i <= n; i++)
fout << d[i] << " ";
}
int main()
{
citeste();
dijkstra(1);
afiseaza();
return 0;
}