Pagini recente » Cod sursa (job #1122582) | Cod sursa (job #1448667) | Cod sursa (job #2103096) | Cod sursa (job #2536090) | Cod sursa (job #2385370)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
#define NMax 50005
#define oo (1 << 30)
int N,M;
int d[NMax];
bool inCoada[NMax];
vector < pair < int, int > > g[NMax];
struct comparaDist
{
bool operator ()( int x, int y )
{
return d[x] > d[y];
}
};
priority_queue < int, vector < int >, comparaDist > 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 (size_t i = 0; i < g[nodCurent].size(); i++ )
{
int Vecin = g[nodCurent][i].first;
int Cost = g[nodCurent][i].second;
if ( d[nodCurent] + Cost < d[Vecin])
d[Vecin] = d[nodCurent] + Cost;
if ( inCoada[Vecin] == false )
Coada.push(Vecin),
inCoada[Vecin] = true;
}
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d", &N, &M );
int x,y,c;
for (int i = 1; i <= M; i++ )
{
scanf("%d %d %d", &x, &y, &c);
g[x].push_back ( make_pair(y,c));
}
dijkstra(1);
for (int i = 2; i <= N; i++ )
{
if ( d[i] != oo )
printf( "%d ", d[i] );
else
printf("0");
}
return 0;
}