Pagini recente » Cod sursa (job #2259118) | Cod sursa (job #611646) | Cod sursa (job #2655149) | Cod sursa (job #2543612) | Cod sursa (job #1497820)
#include <stdio.h>
using namespace std;
const int N = 100001;
const int M = 500001;
struct muchie
{
int x;
int y;
};
muchie v[M];
int e[M],urm[M];
int lst[N];
bool viz[M];
bool ajung[N],grad[N];
int c[M];
int nr=0, nc=0;
void adauga(int i)
{
e[++nr]=i;
urm[nr]=lst[v[i].x];
lst[v[i].x]=nr;
e[++nr]=i;
urm[nr]=lst[v[i].y];
lst[v[i].y]=nr;
}
int celalalt(int i, int x)
{
if(v[i].x==x) return v[i].y;
return v[i].x;
}
void euler(int x)
{
ajung[x]=1;
int y,p,i;
p=lst[x];
while(p!=0)
{
i=e[p];
y=celalalt(i,x);
if(!viz[i])
{
viz[i]=1;
euler(y);
}
p=urm[p];
}
c[++nc]=x;
}
int main()
{
FILE *in=fopen("ciclueuler.in","r");
FILE *out=fopen("ciclueuler.out","w");
int n,m,i;
fscanf(in,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{
fscanf(in,"%d%d",&v[i].x,&v[i].y);
adauga(i);
grad[v[i].x]=1-grad[v[i].x];
grad[v[i].y]=1-grad[v[i].y];
}
for(i=1;i<=n;i++)
if(grad[i])
{
fprintf(out,"-1");
return 0;
}
euler(1);
for(i=1;i<=n;i++)
if(!ajung[i])
{
fprintf(out,"-1");
return 0;
}
for(i=1;i<nc;i++)
fprintf(out,"%d ",c[i]);
return 0;
}