Pagini recente » Cod sursa (job #937871) | Cod sursa (job #642824) | Cod sursa (job #354320) | Cod sursa (job #2458717) | Cod sursa (job #308824)
Cod sursa(job #308824)
#include<stdio.h>
#define N 100005
int n,m,*a[N],*poz[N],d[N],c[5*N],stvec[5*N],stvf[5*N];
int nr=0,viz[N];
void citire(){
int x,y;
scanf("%d%d",&n,&m);
while(m--){
scanf("%d%d",&x,&y);
d[x]++;
if(x!=y)
d[y]++;
}
fclose(stdin);
}
void aloc(){
int i;
for(i=1;i<=n;++i){
a[i]=new int [1+d[i]];
a[i][0]=0;
poz[i]=new int [1+d[i]];
poz[i][0]=0;
d[i]=0;
}
}
void completez(){
int i,x,y;
freopen("ciclueuler.in","r",stdin);
scanf("%d%d",&n,&m);
for(i=1;i<=m;++i){
scanf("%d%d",&x,&y);
a[x][++a[x][0]]=y;
++d[x];
++d[y];
if(x!=y)
{
a[y][++a[y][0]]=x;
poz[x][a[x][0]]=a[y][0];
poz[y][a[y][0]]=a[x][0];
}
}
}
/*
void euler(int x){
int i,y;
for(i=1;i<=a[x][0];++i){
y=a[x][i];
if(y==0)
continue;
a[x][i]=0;
if(x!=y)
a[y][poz[x][i]]=0;
euler(y);
}
c[++nr]=x;
}
void afisare()
{
int i,j;
for(i=1;i<=n;++i)
{
printf("%d:\t",i);
for(j=1;j<=a[i][0];++j)
printf("(%d,poz=%d) ",a[i][j],poz[i][j]);
printf("\n");
}
}
*/
void euler(int x)
{
int k=1,y;
stvf[k]=x;
stvec[k]=0;
while(k)
{
x=stvf[k];
if(stvec[k]<a[x][0])
{
y=a[x][++stvec[k]];
if(y==0)
continue;
a[x][stvec[k]]=0;
if(x!=y)
a[y][poz[x][stvec[k]]]=0;
stvf[++k]=y;
stvec[k]=0;
continue;
}
c[++nr]=x;
--k;
}
}
void dfs(int x){
}
bool ver(){
int i;
for(i=1;i<=n;++i)
if(d[i]%2==1)
return false;
return true;
}
int main(){
int i;
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
aloc();
completez();
//afisare();
euler(1);
if(!ver())
printf("-1\n");
else
for(i=1;i<=nr;++i)
printf("%d ",c[i]);
fclose(stdin);
fclose(stdout);
return 0;
}