Cod sursa(job #270757)

Utilizator hasegandaniHasegan Daniel hasegandani Data 4 martie 2009 15:40:35
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<stdio.h>

#define nmax 100001

struct nod 
{
    int drum;
    nod *urm;
} *l[nmax];

int n,m,c[nmax],ct;

void add(nod *&inc,int info)
{
    nod *p=new nod;
    p->drum=info;
    p->urm=inc;
    inc=p;
}

void sterg (nod *&inc,int info)
{
    nod *t=inc;
    if (t->drum!=info)
        {
        for(;t->urm && t->urm->drum!=info;t=t->urm) ;
        
        //nod *q=t->urm;
        t->urm=t->urm->urm;
        //delete q;
	    }
    else
	   {
	   //nod *q=inc;
	   inc=inc->urm;
	   //delete q;
	   }
}

void euler(int k)
{
    int x;
    while (l[k])
        {
            x=l[k]->drum;
            
            l[k]=l[k]->urm;
            sterg(l[x],k);
            
            euler(x);
        }
        
    c[++ct]=k;
}

int main()
{
    int a,b;
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(int i=1;i<=m;++i)
        {
        scanf("%d%d",&a,&b);
        add(l[a],b);
        add(l[b],a);
	   }
    euler(1);
    for(int i=1;i<ct;++i)
	   printf("%d ",c[i]);
	printf("\n");
    return 0;
}