Pagini recente » Cod sursa (job #2611901) | Cod sursa (job #140349) | Cod sursa (job #2581199) | Cod sursa (job #2359855) | Cod sursa (job #260802)
Cod sursa(job #260802)
#include <cstdio>
#define inf 9999999
#define nmax 50001
using namespace std;
int d[nmax],t[nmax],used[nmax],n,m;
struct nod { int nr,co1; nod *next;} *g[nmax];
nod *q;
void baga(int x, int y, int z)
{
q=new nod;
q->nr=y;
q->co1=z;
q->next=g[x];
g[x]=q;
q=new nod;
q->nr=x;
q->co1=z;
q->next=g[y];
g[y]=q;
}
int neviz()
{
for(int i=1;i<=n;i++)
if(!used[i])
return 1;
return 0;
}
void update(int x)
{
used[x]=1;
for(q=g[x];q;q=q->next)
if(!used[q->nr] && d[x]+q->co1<d[q->nr])
{
d[q->nr]=d[x]+q->co1;
t[q->nr]=x;
}
}
void dijkstra()
{
int min,pmin;
while(neviz() && min!=inf)
{
min=inf;
for(int i=1;i<=n;i++)
if(!used[i] && d[i]<min)
{
min=d[i];
pmin=i;
}
update(pmin);
}
}
int main()
{
int x,y,z;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
{
scanf("%d %d %d",&x,&y,&z);
baga(x,y,z);
}
for(q=g[1];q;q=q->next)
{
d[q->nr]=q->co1;
t[q->nr]=1;
}
used[1]=1;
for(int i=1;i<=n;i++)
if(d[i]==0 && i!=1)
d[i]=inf;
dijkstra();
for(int i=2;i<=n;i++)
{
if(d[i]==inf)
printf("0 ");
else
printf("%d ",d[i]);
}
return 0;
}