Pagini recente » Cod sursa (job #3216705) | Cod sursa (job #1837825) | Cod sursa (job #50339) | Cod sursa (job #2124237) | Cod sursa (job #363493)
Cod sursa(job #363493)
#include<stdio.h>
#include<vector>
using namespace std;
int N, M;
vector< pair<int, int> > G[50035];
int D[50001];
const int inf = 999999999;
int main()
{
int u, v, c, i, j, ind, m[50001], minim;
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d%d", &N, &M);
for(i = 1; i <= M; i++)
{
scanf("%d %d %d", &u, &v, &c); // u->v cost c
G[u].push_back( make_pair(v, c) );
}
for(i = 2; i <= N; i++)
D[i] = inf;
// dijkstra
for(i = 1; i <= N-1; i++)
{
minim = inf;
for(j = 1; j <= N; j++)
if(D[j] < minim && !m[j]) minim = D[j], ind = j;
m[ind] = 1;
int nr_v = G[ind].size();
for (j = 0; j < nr_v; j++)
{
int v = G[ind][j].first;
int c = G[ind][j].second;
if (D[ind] + c < D[v])
D[v] = D[ind] + c; // relaxare
}
}
for (i = 2; i <= N; i++)
if (D[i] == inf)
printf("0 ");
else
printf("%d ", D[i]);
printf("\n");
return 0;
}