Cod sursa(job #264813)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 22 februarie 2009 19:41:35
Problema Ciclu Eulerian Scor 80
Compilator c Status done
Runda Arhiva educationala Marime 1.08 kb
#include<stdio.h>
typedef struct
{ int x,leg;} muchie;
muchie a[1000001];
int n,m,t[100001],stiva[500002],vf,x,y,i,k;
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%i%i",&n,&m);
for (k=0,i=1;i<=m;i++)
    {
    scanf("%i%i",&x,&y);
    k++;     a[k].x=y; a[k].leg=t[x]; t[x]=k;
    k++;     a[k].x=x; a[k].leg=t[y]; t[y]=k;
    }
k=m+1;
stiva[1]=1; vf=1;
while (vf>0)
      {
      x=stiva[vf];
      if (t[x]>0)
         {
         i=t[x];
         y=a[i].x;
         vf++;
         stiva[vf]=y;
         t[x]=a[i].leg;//practic se elimina muchia x y
         i=t[y];
         if (a[i].x==x)t[y]=a[i].leg;
            else {
                 while (a[a[i].leg].x!=x)i=a[i].leg;
                 a[i].leg=a[a[i].leg].leg;
                 }
         }
         else
         {
         if (k==m+1 && stiva[vf]>1) k=2*m;
         printf("%i ",stiva[vf]);
         vf--;
         k--;
         }
      }
if (k>0) { freopen("ciclueuler.out","w",stdout); printf("-1");}
fclose(stdout);
fclose(stdin);
return 0;
}