Pagini recente » Monitorul de evaluare | Cod sursa (job #2017682) | Cod sursa (job #1243868) | Cod sursa (job #1283531) | Cod sursa (job #388746)
Cod sursa(job #388746)
# include <fstream.h>
ifstream f ("ciclueuler.in");
ofstream g ("ciclueuler.out");
int s[100005],i,n,m,x,y,k,ok;
struct nod
{
int info;
nod *urm;
}*p,*a[100005],*z,*q,*w,*v;
void df (int x)
{
nod *p;
s[x]=1;
p=a[x];
while (p)
{
if (s[p->info]==0)
df (p->info);
p=p->urm;
}
}
void sterg (int x,int y)
{
nod *p;
p=a[x];
if (p)
if (p->info==y)
a[x]=a[x]->urm;
else
while (p)
{
if (p->urm && p->urm->info==y)
{
if (p->urm->urm)
p->urm=p->urm->urm;
else
p->urm=0;
}
p=p->urm;
}
}
void ciclu (int x)
{
p=a[x];
a[x]=a[x]->urm;
sterg (p->info,x);
w=new nod;
w->info=p->info;
if (z->urm)
w->urm=z->urm;
else
w->urm=0;
z->urm=w;
z=w;
k++;
if (a[p->info])
ciclu (p->info);
}
int main ()
{
f>>n>>m;
for (i=1;i<=m;i++)
{
f>>x>>y;
p=new nod;
p->info=x;
p->urm=a[y];
a[y]=p;
p=new nod;
p->info=y;
p->urm=a[x];
a[x]=p;
}
ok=0;
for (i=1;i<=n;i++)
{
k=0;
p=a[i];
while (p)
{
k++;
p=p->urm;
}
if (k%2==1)
ok=1;
}
df (1);
for (i=1;i<=n;i++)
if (s[i]==0)
ok=1;
if (ok==1)
g<<"-1";
else
{
v=new nod;
v->info=1;
v->urm=0;
q=v;
while (q)
{
z=q;
if (a[q->info])
ciclu (q->info);
q=q->urm;
}
}
while (v->urm)
{
g<<v->info<<" ";
v=v->urm;
k++;
}
return 0;
}