Pagini recente » Istoria paginii utilizator/stoianmihail | Cod sursa (job #321091) | Cod sursa (job #3122353) | Cod sursa (job #1694449) | Cod sursa (job #374087)
Cod sursa(job #374087)
#include <stdio.h>
#include <string.h>
#define max 50010
const int inf=0x3f3f3f3f;
struct lista
{
int nod,cost;
lista *next;
};
lista *g[max],*p;
int d[max],q[max*5],i,j,n,m,k,c,prim,ultim,u,drum[max];
char inq[5*max];
void push(int i,int j,int c)
{
lista *p=new lista;
p->cost=c;
p->nod=j;
p->next=g[i];
g[i]=p;
}
void path(int i)//de la sursa-1 la nodul i
{
if(drum[i]) path(drum[i]);
printf("%d ",i);
}
int main()
{
freopen("dijkstra.in","r",stdin);
//freopen("dijkstra.out","w",stdout);
scanf("%d%d",&n,&m);
for(k=1; k<=m; k++)
{
scanf("%d%d%d",&i,&j,&c);
push(i,j,c);
}
memset(d,inf,sizeof(d));
d[1]=0;
q[1]=prim=ultim=1; inq[1]=1;
while(prim<=ultim)
{
u=q[prim++];
inq[u]=0;
for(p=g[u]; p!=NULL; p=p->next)
if(d[p->nod]>d[u]+p->cost)
{
if(!inq[p->nod])
{
inq[p->nod]=1;
q[++ultim]=p->nod;
}
d[p->nod]=d[u]+p->cost;
drum[p->nod]=u;
}
}
for(i=2; i<=n; i++)
if(d[i]!=inf) printf("%d ",d[i]);
else printf("0 ");
return 0;
}