Pagini recente » Cod sursa (job #2626729) | Cod sursa (job #1530386) | Cod sursa (job #1538813) | Cod sursa (job #1593225) | Cod sursa (job #2982994)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout ("dijkstra.out");
const int Nmax = 50005, oo = (1 << 30) - 1;
int n, m, d[Nmax];
vector < pair < int, int> > G[Nmax];
struct compara
{
bool operator()(int x, int y)
{
return d[x] < d[y];
}
};
priority_queue< int, vector<int>, compara> coada;
bool InCoada[Nmax];
void cit()
{
fin >> n >> m;
for(int i = 1 ; i <= m ; i++)
{
int x, y, c;
fin >> x >> y >> c;
G[x].push_back(make_pair(y,c));
}
}
void afisare()
{
for(int i = 2 ; i <= n ; i++)
if( d[i] != oo)
fout << d[i] << " ";
else
fout << 0 << " ";
}
void Dijkstra(int start)
{
coada.push(start);
InCoada[start] = true;
for(int i = 2 ; i <= n ; i++)
d[i] = oo;
while(!coada.empty())
{
int varf = coada.top();
coada.pop();
InCoada[varf] = false;
for( auto j : G[varf])
{
int vecin = j.first;
int cost = j.second;
if(d[vecin] > d[varf] + cost)
d[vecin] = d[varf] + cost;
if(InCoada[vecin] == false)
{
coada.push(vecin);
InCoada[vecin] = true;
}
}
}
}
int main()
{
cit();
Dijkstra(1);
afisare();
return 0;
}