Pagini recente » Cod sursa (job #379042) | Cod sursa (job #1036482) | Cod sursa (job #1003717) | Cod sursa (job #2395004) | Cod sursa (job #292429)
Cod sursa(job #292429)
#include<fstream.h>
#define nmax 100001
#define mmax 500001
int sol[mmax],grd[nmax],s[mmax],v[nmax],nr,n,m;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
struct nod
{int z;nod *adr;};
nod *c,*l[nmax];
void graf()
{
int i,j;
nod *c;
f>>n>>m;
while (f>>i>>j)
{c=new nod;c->z=j;c->adr=l[i];l[i]=c;grd[j]++;
c=new nod;c->z=i;c->adr=l[j];l[j]=c;grd[i]++;}
}
int verif()
{
for (int i=1;i<=n;i++)
if (grd[i]%2 || !v[i]) return 0;
return 1;
}
void sterg(int i,int j)
{
nod *p=l[i];
l[i]=l[i]->adr;
delete p;;
if(l[j]->z!=i)
{
for(p=l[j];p->adr;p=p->adr)
if(p->adr->z==i)
{
nod *u=l[j]->adr;
p->adr=p->adr->adr;
delete u;
break;
}
}
else
{
p=l[j];
l[j]=l[j]->adr;
delete p;
}
}
void euler()
{
int vf=1;
s[vf]=1;
while(vf)
{
int x=s[vf];
if(l[x])
{
vf++;s[vf]=l[x]->z;
sterg(x,l[x]->z);
}
else
sol[++nr]=s[vf--];
}
}
void dfs(int x)
{
nod *c;
v[x]=1;
c=l[x];
while(c)
{
if(v[c->z]==0) dfs(c->z);
c=c->adr;
}
}
int main()
{
graf();
dfs(1);
if (verif())
{
euler();
for (int i=1;i<nr;i++) g<<sol[i]<<" ";
//cout<<'\n';
}
else g<<-1<<'\n';
f.close();
g.close();
return 0;
}