Pagini recente » Statistici Mesaros Antonio Cristian (antonio_mesaros) | Cod sursa (job #973345) | Profil Rares31100 | cheerleader | Cod sursa (job #405964)
Cod sursa(job #405964)
#include <stdio.h>
#include <vector>
#define inf 1<<30
#define Nmax 50005
using namespace std;
vector < pair <int, int> > A[Nmax];
long sol[Nmax], d[5*Nmax], viz[Nmax];
int n, m, i, a, b, c, p, u, nod, l, fiu;
void BFS(){
p = 1;
u = 1;
d[p] = 1;
viz[1] = 1;
while (p <= u){
nod = d[p];
l = (int)A[nod].size();
for (i = 0 ; i < l ; i++){
fiu = A[nod][i].first;
a = sol[fiu];
sol[fiu] = min ( sol[nod] + A[nod][i].second, sol[fiu] );
if (a != sol[fiu])
viz[fiu] = 0;
if (viz[fiu] == 0){
d[++u] = fiu;
viz[fiu] = 1;
}
}
++p;
}
}
int main (){
FILE * f = fopen ("dijkstra.in", "r");
FILE * g = fopen ("dijkstra.out", "w");
fscanf (f, "%d %d", &n, &m);
for (i = 1 ; i <= m ; i++){
fscanf (f, "%d %d %d", &a, &b, &c);
A[a].push_back ( make_pair (b, c) );
}
for (i = 2 ; i <= Nmax ; i++)
sol[i] = inf;
BFS();
for (i = 2 ; i <= n ; i++)
if (sol[i] != inf )
fprintf (g, "%d ", sol[i]);
else
fprintf(g, "0 ");
fclose(f);
fclose(g);
return 0;
}