Pagini recente » Cod sursa (job #1622427) | Cod sursa (job #1228315) | Cod sursa (job #484384) | Cod sursa (job #1408925) | Cod sursa (job #1451401)
#include <stdio.h>
#define MAXN 100000
#define MAXM 500000
FILE *fin, *fout;
int folosit[MAXM], val[2*MAXM], next[2*MAXM], lista[MAXN+1], stiva[MAXM+1], nr[MAXN+1], k;
inline void adauga(int x, int y){
val[++k]=y;
next[k]=lista[x];
lista[x]=k;
nr[x]++;
}
inline void euler(int nod){
int vf;
stiva[0]=nod;
vf=0;
while(vf>=0){
if(lista[stiva[vf]]==0){
fprintf(fout, "%d ", stiva[vf]);
vf--;
}else if(folosit[(lista[stiva[vf]]-1)/2]==1){
lista[stiva[vf]]=next[lista[stiva[vf]]];
}else{
folosit[(lista[stiva[vf]]-1)/2]=1;
vf++;
stiva[vf]=val[lista[stiva[vf-1]]];
lista[stiva[vf-1]]=next[lista[stiva[vf-1]]];
}
}
}
int main(){
int n, m, i, a, b, f, start;
fin=fopen("ciclueuler.in", "r");
fout=fopen("ciclueuler.out", "w");
fscanf(fin, "%d%d", &n, &m);
for(i=0; i<m; i++){
fscanf(fin, "%d%d", &a, &b);
adauga(a, b);
adauga(b, a);
}
f=1;
for(i=1; i<=n; i++){
if(nr[i]%2==1){
f=0;
}
if(nr[i]>0){
start=i;
}
}
if(f==0){
fprintf(fout, "-1\n");
}else{
euler(start);
}
fclose(fin);
fclose(fout);
return 0;
}