Pagini recente » Cod sursa (job #2435045) | Cod sursa (job #1146263) | Cod sursa (job #1540564) | Cod sursa (job #840876) | Cod sursa (job #1451366)
#include <stdio.h>
#define MAXN 100000
#define MAXM 500000
FILE *fin, *fout;
int folosit[MAXM], val[2*MAXN], st[2*MAXM], dr[2*MAXM], lista[MAXN+1], nr[MAXN+1], k;
inline void adauga(int x, int y){
val[++k]=y;
st[k]=lista[x];
dr[st[k]]=k;
lista[x]=k;
nr[x]++;
}
void euler(int nod){
int p=lista[nod];
while(p!=0){
if(folosit[(p-1)/2]==0){
folosit[(p-1)/2]=1;
st[dr[p]]=st[p];
dr[st[p]]=dr[p];
euler(val[p]);
}else{
st[dr[p]]=st[p];
dr[st[p]]=dr[p];
}
p=st[p];
}
fprintf(fout, "%d ", nod);
}
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;
}