Cod sursa(job #314845)

Utilizator cipriancxFMI - gr143 Timofte Ciprian cipriancx Data 13 mai 2009 11:45:05
Problema Algoritmul lui Dijkstra Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.45 kb
#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;
}