Pagini recente » Cod sursa (job #552987) | Cod sursa (job #570843) | Cod sursa (job #1444383) | Rating Banciu (Nyca) | Cod sursa (job #314845)
Cod sursa(job #314845)
#include<stdio.h>
#include<stdlib.h>
int n,m;
struct nod{ unsigned short val;
short dist;
struct nod* urm;
}*d[50001],*u[50001],*pc;
struct ant{ int val; struct ant* anter;}*ult;
int viz[50001],nc,dis[50001],vizitate,max=(1<<16)-1;
int main(void)
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d",&n,&m);
int i,len=sizeof(struct nod*);
for(i=1; i<=50000; i++){d[i]=u[i]=malloc(len); dis[i]=max;}
for(i=1; i<=m; i++)
{ int x,y,z; scanf("%d %d %d",&x,&y,&z);
pc=malloc(len);
if(viz[x]==0){pc->val=y; pc->urm=NULL; pc->dist=z;
d[x]->urm=pc; u[x]=pc; viz[x]=1;}
else{ pc->val=y; pc->urm=NULL; pc->dist=z;
u[x]->urm=pc; u[x]=pc;}
}
for(i=1; i<=50001; i++)viz[i]=0;
nc=1;
vizitate=1;
while(vizitate<n){ pc=malloc(len);
pc=d[nc]->urm;
while(pc!=NULL){if(pc->dist<dis[pc->val])dis[pc->val]=pc->dist;
pc=pc->urm;
}
int min=1001,nod2;
pc=d[nc]->urm;
while(pc!=NULL){ if(pc->dist<min){min=pc->dist; nod2=pc->val;}
pc=pc->urm;
}
nc=nod2; vizitate++;
}
return 0;
}