Pagini recente » Cod sursa (job #255946) | Cod sursa (job #280983) | Cod sursa (job #2933470) | Cod sursa (job #702237) | Cod sursa (job #1133321)
#include<fstream>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
struct nod{int inf;nod*leg;};
typedef nod* PNod;
PNod L[100001];
int viz[100001],t[100001],d[100001],ok,n,m,nrsol;//sol[500001];
void add(int x,int y)
{
PNod p=new nod;
p->inf=y;
p->leg=L[x];
L[x]=p;
}
void citire()
{ int i,x,y;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
add(x,y);d[y]++;
add(y,x);d[x]++;
}
}
void df(int i)
{
viz[i]=1;
for(PNod p=L[i];p;p=p->leg)
if(viz[p->inf]==0)
{
t[p->inf]=i;
df(p->inf);
}
}
int verif()
{
int i;
for(i=1;i<=n;i++)
if(viz[i]==0)return 0;
for(i=1;i<=n;i++)
if(d[i]%2==1)return 0;
return 1;
}
void sterge(int x,int y)
{
PNod q,p;
for(p=L[x];p;q=p,p=p->leg)
if(p->inf==y)
{
q->leg=p->leg;
delete p;
}
}
void euler(int i)
{
PNod p;
for(p=L[i];p;p=p->leg)
if(t[p->inf]!=i&&p->inf!=t[i])
{
g<<p->inf<<" ";
int nodcur=p->inf;
sterge(i,p->inf);
sterge(p->inf,i);
euler(nodcur);
}
for(p=L[i];p;p=p->leg)
{
g<<t[p->inf]<<" ";
sterge(i,p->inf);sterge(p->inf,i);
}
}
/*void afisare()
{
for(int i=1;i<=nrsol;i++)
g<<sol[i]<<" ";
}*/
int main()
{
citire();
df(1);
ok=verif();
if(ok==0)
g<<"-1\n";
else
{
euler(1);
//afisare();
}
return 0;
}