Cod sursa(job #315375)

Utilizator ZillaMathe Bogdan Zilla Data 15 mai 2009 10:37:38
Problema Ciclu Eulerian Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 2.28 kb
#include <stdio.h>

#define Nmax 100100
#define Mmax 500100

struct nod{
    int info,viz;
    nod *next;
};

nod *p[Nmax];

int cnt,n,m,sol[Mmax];


void sterge(int x,int y)
{
    nod *current=p[x];
	while(current)
		{
			if(current->info==y && current->viz==0)
				{
					current->viz=1;

					current=NULL;
				}
			else
				current=current->next;
		}
	current=p[y];
	while(current)
		{
			if(current->info==x && current->viz==0)
				{
					current->viz=1;
					current=NULL;
				}
			else
				current=current->next;
        }      
}

/*void sterge(int x,int y)
{
    nod *current=p[x];
    if(current->info==y)
        {
            delete current;
            p[x]=current->next;
            current=NULL;
        }
    while(current)
        {
            if(current->next->info==y)
                {
                    current->next=current->next->next;
                    delete current->next;
                    current=NULL;
                }
            current=current->next;
        }
    current=p[y];
    if(current->info==x)
        {
            delete current;
            p[y]=current->next;
            current=NULL;
        }
    while(current)
        {
            if(current->next->info==y)
                {
                    current->next=current->next->next;
                    delete current->next;
                    current=NULL;
                }
            current=current->next;
        }
}*/

void euler(int u)
{
    nod *current=p[u];
    while(current)
        {
            if(current->viz==0)
                {
                    sterge(current->info,u);
                    euler(current->info);
                }
            current=current->next;
        }
    sol[++cnt]=u;
}

void add(int x,int y)
{
    nod *current=new nod;
    current->info=y;
	current->next=p[x];
	current->viz=0;
	p[x]=current;
}

int main()
{
	freopen("ciclueuler.in","r",stdin);
	freopen("ciclueuler.out","w",stdout);
    
    int i,x,y;
    
    scanf("%d%d",&n,&m);
    
    for(i=1;i<=m;++i)
        {
            scanf("%d%d",&x,&y);
            add(x,y);
			add(y,x);
		}
   //	sol[++cnt]=1;

	euler(1);

	for(i=1;i<cnt;++i)
        printf("%d ",sol[i]);

    return 0;    
}