Pagini recente » Cod sursa (job #1180074) | Cod sursa (job #2297384) | Cod sursa (job #1153380) | Cod sursa (job #2289465) | Cod sursa (job #308813)
Cod sursa(job #308813)
#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;
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;
}
}
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;
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;
}
}
int main(){
int i;
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
aloc();
completez();
//afisare();
euler(1);
if(c[1]!=c[nr] || nr!=m+1)
printf("-1");
else
for(i=1;i<=m;++i)
printf("%d ",c[i]);
fclose(stdin);
fclose(stdout);
return 0;
}