Pagini recente » Cod sursa (job #1455178) | Cod sursa (job #1862791) | Cod sursa (job #266818) | Cod sursa (job #817778) | Cod sursa (job #2537055)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
#define oo (1 << 30)
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
vector<pair<int, int>>graf[50001];
queue<int>coada;
int d[50001];
bool viz[50001];
bool existaInCoada[50001];
int n,m;
void citire()
{
in>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,c;
in>>x>>y>>c;
graf[x].push_back(make_pair(y, c));
}
}
void Dijkstra(int nod_start)
{
for(int i=1;i<=n;i++)
d[i] = oo;
d[nod_start] = 0;
coada.push(nod_start);
existaInCoada[nod_start] = true;
while(!coada.empty())
{
int nod_cur = coada.front();
coada.pop();
existaInCoada[nod_cur] = false;
for(size_t i = 0;i < graf[nod_cur].size();i++)
{
int vecin = graf[nod_cur][i].first;
int cost = graf[nod_cur][i].second;
if(d[nod_cur] + cost < d[vecin])
{
d[vecin] = d[nod_cur] + cost;
if(!existaInCoada[vecin]){
coada.push(vecin);
existaInCoada[vecin] = true;
}
}
}
}
}
void afiseaza()
{
for(int i=2;i<=n;i++)
if(d[i] != oo)
out<<d[i]<<" ";
else
out<<"0 ";
}
int main()
{
citire();
Dijkstra(1);
afiseaza();
}