Pagini recente » Cod sursa (job #3192872) | Cod sursa (job #1612207) | Cod sursa (job #1829156) | Cod sursa (job #2579134) | Cod sursa (job #280558)
Cod sursa(job #280558)
#include <cstdio>
#include <cstring>
#include <list>
using namespace std;
#define TR(c, it) for (typeof(c.begin())it=c.begin(); it!=c.end(); it++)
#define pb push_back
#define mp make_pair
#define dim 50100
#define inf 1000000000
int n, m, d[dim];
list< pair<int, int> > l[dim];
list<int> w;
void dijkstra()
{
int i, vm, dist;
for (i=2; i<=n; i++) d[i]=inf;
for (i=1; i<=n; i++) w.pb(i);
while (!w.empty())
{
typeof(w.begin()) v;
dist=inf;
TR(w, vv)
if (d[*vv]<dist)
{
dist=d[*vv];
vm=*vv;
v=vv;
}
w.erase(v);
TR(l[vm], j)
if (d[(*j).first]>dist+(*j).second)
d[(*j).first]=dist+(*j).second;
}
}
int main()
{
int a, b, cost, i;
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d %d\n", &n, &m);
for (i=1; i<=m; i++)
{
scanf("%d %d %d\n", &a, &b, &cost);
l[a].pb(mp(b, cost));
l[b].pb(mp(a, cost));
}
dijkstra();
for (i=2; i<=n; i++) printf("%d ", d[i]==inf?0:d[i]);
return 0;
}