Cod sursa(job #318160)

Utilizator cipriancxFMI - gr143 Timofte Ciprian cipriancx Data 27 mai 2009 11:54:22
Problema Sortare topologica Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.99 kb
#include<stdio.h>
#include<stdlib.h>

struct nod { int val; struct nod* urm; }*d[50001];

int dnod=sizeof(struct nod*);
int n,m;
int viz[50001];

void scoatere(int k)
{
     
     int ii;
     for(ii=1; ii<=n; ii++)
        if(d[ii]->urm){ struct nod *ax;
                        ax=d[ii];
                        while(ax->urm){if(ax->urm->val==k){ax->urm=ax->urm->urm; d[ii]->val--;}
                                       else ax=ax->urm; 
                                      }
                                                    
                                          
                                          
                                           }
                                           
                                           
                                           
}











int main(void){
    
    freopen("sortaret.in","r",stdin);
    freopen("sortaret.out","w",stdout);

scanf("%d %d",&n,&m);

int i;
for(i=1; i<=n; i++){d[i]=malloc(dnod); d[i]->urm=NULL; d[i]->val=0; }


 
for(i=1; i<=m; i++){ int x,y;    scanf("%d %d",&x,&y);
                                   
                     struct  nod *p,*nc; nc=malloc(dnod);
                     p=d[x];
                     
                     while(p->urm)p=p->urm;
                     nc->val=y; nc->urm=NULL; p->urm=nc; 
                     d[x]->val++;                  
                    }
                   
struct nod *lst,*ult; lst=ult=malloc(dnod);
ult=lst;
int noduri=n;
int j;


for(i=1; i<=n; i++)if(d[i]->val==0 && viz[i]==0)

{        viz[i]=1;
         noduri--;
         struct nod *p=malloc(dnod); 
                
                p->urm=NULL; p->val=i; 
                ult->urm=p; ult=p;
                scoatere(i);
                
                                                    
}



struct nod *au; au=malloc(dnod);
au=lst->urm;
while(au){printf("%d \n",au->val); au=au->urm;} 
printf("%d \n",d[9]->val);

return 0;
}