Pagini recente » Cod sursa (job #3199707) | Cod sursa (job #2968745) | Cod sursa (job #3237889) | Cod sursa (job #2738775) | Cod sursa (job #1468527)
#include<fstream>
#define NM 100002
#define MM 500002
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int *a[NM];
int x[MM],y[MM];
int viz[NM];
int st[MM];
int vf,nr;
void df(int);
inline void swap(int &x,int &y)
{
int aux=x;
x=y;
y=aux;
}
int n,m,grad[NM];
int main()
{
f>>n>>m;
int i,c,d;
for(i=1;i<=m;i++)
{
f>>c>>d;
x[i]=c;
y[i]=d;
grad[d]++;
grad[c]++;
}
for(i=1;i<=n;i++)
{
a[i]=new int[grad[i]+1];
a[i][0]=0;
}
for (i=1;i<=m;i++)
{
a[x[i]][0]++;
a[x[i]][a[x[i]][0]]=y[i];
a[y[i]][0]++;
a[y[i]][a[y[i]][0]]=x[i];
}
df(1);
for(i=1;i<=n;i++)
if(grad[i]%2==1||viz[i]==0)
{
g<<"-1";
return 0;
}
vf=1;
st[vf]=1;
int x,y;
while(vf)
{
x=st[vf];
if(a[x][0]==0)
{
nr++;
if(nr<=m)
{
g<<x<<" ";
}
vf--;
continue;
}
y=a[x][a[x][0]];
if(y==x)
a[x][0]--;
for(i=1;i<=a[y][0];i++)
{
if (a[y][i]==x)
{
swap(a[y][i],a[y][a[y][0]]);
break;
}
}
if(y!=x)
a[x][0]--;
a[y][0]--;
st[++vf]=y;
}
return 0;
}
void df(int k)
{
viz[k]=1;
int i;
for(i=1;i<=a[k][0];i++)
if(!viz[a[k][i]])
{
df(a[k][i]);
}
}