Cod sursa(job #269336)

Utilizator free2infiltrateNezbeda Harald free2infiltrate Data 2 martie 2009 19:54:45
Problema Ciclu Eulerian Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>
#define nmax 100001

struct nod
{
int x,i;
nod *urm;
};
nod *A[nmax],*s[5*nmax];
int ok[5*nmax],sol[5*nmax],grad[nmax];

void add(int x,int i,int y)
{
nod *urm = new nod;
urm->x = y;
urm->i = i;
urm->urm = A[x];
A[x] = urm;
}

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

int n,m,x,y;
scanf("%d%d\n",&n,&m);

while (m)
{
scanf("%d%d\n",&x,&y);
add(x,m,y);
add(y,m,x);
grad[x]++;
grad[y]++;
m--;
}

for (int i=1;i<=n;i++) if (grad[i]%2) {printf("%d ",-1);return 0;};

int k=1;
s[k] = A[1];
sol[k]=1;
while (k)
{
if (s[k]!=NULL) if (ok[s[k]->i]==0) {
				  ok[s[k]->i]=1;
				  s[k+1] = A[s[k]->x];
				  sol[k+1] = s[k]->x;
				  k++;
				    }
		else s[k]=s[k]->urm;
else if (k>1) printf("%d ",sol[k--]);
     else k--;
}
return 0;
}