Cod sursa(job #373398)

Utilizator cristikIvan Cristian cristik Data 13 decembrie 2009 18:58:20
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <stdio.h>
#include <stdlib.h>
#define max 100010
int i,j,n,m,k,stack[max],top;
int *a[max];
void erase(int v,int w)
{
    int i;
    for(i=1; i<=a[v][0]; i++)
     if(a[v][i]==w)
     {
         a[v][i]=a[v][a[v][0]--];
         break;
     }
     for(i=1; i<=a[w][0]; i++)
      if(a[w][i]==v)
      {
          a[w][i]=a[w][a[w][0]--];
          break;
      }
}
void euler(int v)
{
    int i,w;
    stack[++top]=v;
    while(top)
    {
        w=stack[top--]; printf("%d ",w);
        for(i=1; i<=a[w][0]; i++)
        {
            erase(w,a[w][i]);
            stack[++top]=a[w][i];
        }
    }
}


int main()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1; i<=n; i++)
    {
        a[i]=(int *)realloc(a[i],sizeof(int));
        a[i][0]=0;
    }
    for(; m>0; m--)
    {
        scanf("%d%d",&i,&j);
        a[i][0]++;
        a[i]=(int *)realloc(a[i],(a[i][0]+1)*sizeof(int));
        a[i][a[i][0]]=j;
        a[j][0]++;
        a[j]=(int *)realloc(a[j],(a[j][0]+1)*sizeof(int));
        a[j][a[j][0]]=i;
    }
    euler(1);
    return 0;
}