Pagini recente » Cod sursa (job #78929) | Cod sursa (job #301994) | Cod sursa (job #2460359) | Cod sursa (job #370329) | Cod sursa (job #396664)
Cod sursa(job #396664)
#include <cstdio>
#include <set>
#define DIM 50005
#define mp make_pair
using namespace std;
const int INF = 1<<30;
struct nod
{
int x, cost;
nod *next;
};
nod *G[DIM];
int n, m, d[DIM];
set< pair<int, int> > S;
void addMuchie(int i, int j, int cost)
{
nod *p = new nod;
p->x = j;
p->cost = cost;
p->next = G[i];
G[i] = p;
}
void dijkstra()
{
S.insert(mp(0, 1));
d[1] = 0;
int val, i;
while (S.size() > 0)
{
val = (*S.begin()).first;
i = (*S.begin()).second;
S.erase(*S.begin());
for (nod *p = G[i]; p; p = p -> next)
if (d[p->x] > d[i] + p->cost)
d[p->x] = d[i] + p->cost, S.insert(mp(d[p->x], p->x));
}
}
int main()
{
FILE *f = fopen("dijkstra.in", "r");
fscanf(f, "%d%d", &n, &m);
for (int i = 2; i <= n; ++i)
d[i] = INF;
for (int x, y, c; m; --m)
{
fscanf(f, "%d%d%d", &x, &y, &c);
addMuchie(x, y, c);
if (x == 1)
d[y] = c, S.insert(mp(c, y));
}
fclose(f);
dijkstra();
f = fopen("dijkstra.out", "w");
for (int i = 2; i <= n; ++i)
fprintf(f, "%d ", d[i] == INF ? 0 : d[i]);
fclose(f);
return 0;
}