Pagini recente » Cod sursa (job #673519) | Cod sursa (job #394483) | Cod sursa (job #1762701) | Cod sursa (job #1952895) | Cod sursa (job #2724656)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int oo = (1 << 30);
const int Nmax = 50005;
int N,M;
int D[Nmax];
bool inCoada[Nmax];
vector<pair<int,int>> graf[Nmax];
struct compara
{
bool operator ()(int x,int y)
{
return ( D[x] > D[y] );
}
};
priority_queue<int , vector<int> , compara> coada;
void Dijkstra(int nodStart)
{
for(int i=1;i<=N;i++)
D[i] = oo;
D[nodStart] = 0;
coada.push(nodStart);
inCoada[nodStart] = true;
while(!coada.empty())
{
int nodCurent = coada.top();
coada.pop();
inCoada[nodCurent] = false;
for(unsigned int i=0;i<graf[nodCurent].size();i++)
{
int nodVecin = graf[nodCurent][i].first;
int cost = graf[nodCurent][i].second;
if(D[nodCurent] + cost < D[nodVecin])
{
D[nodVecin] = D[nodCurent] + cost;
if(!inCoada[nodVecin])
{
coada.push(nodVecin);
inCoada[nodVecin] = true;
}
}
}
}
}
void Read()
{
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));
}
}
void Print()
{
for(int i=2;i<=N;i++)
if(D[i]!=oo)fout<<D[i]<<" ";
else fout<<0<<" ";
}
int main() {
Read();
Dijkstra(1);
Print();
return 0;
}