Pagini recente » Cod sursa (job #2790119) | oji_sim_10 | Cod sursa (job #159490) | Cod sursa (job #2324280) | Cod sursa (job #472620)
Cod sursa(job #472620)
#include <cstdio>
#include <vector>
#define N 100001
using namespace std;
struct muc
{int m,i;
bool b;
muc(int x,int y,bool z)
{m=x;
i=y;
b=z;
}
};
vector<muc> vec[N];
struct nod
{int n;
nod *urm,*prev;
};
nod *prim,*ultim;
void insereaza(nod* &p,int k)
{nod* q=new nod;
q->urm=p->urm; p->urm=q;
q->urm->prev=q;
q->prev=p;
q->n=k;
p=q;
}
typedef vector<muc>::iterator IT;
inline void euler(int k,nod* p)
{insereaza(p,k);
for (IT it=vec[k].begin();it!=vec[k].end();it++)
{if(it->b==true)continue; //muchia a mai fost vizitata
it->b=true;
if(it->m!=k)
{vec[it->m][it->i].b=true;
euler(it->m,p);
}
else
{insereaza(p,it->m);
}
}
}
void init()
{prim=new nod;
ultim=new nod;
prim->n=ultim->n=-1;
prim->urm=ultim;
ultim->prev=prim;
prim->prev=NULL;
ultim->urm=NULL;
}
int main ()
{int n,m,x,y,s1,s2;
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d %d",&n,&m);
for (int i=1;i<=m;i++)
{scanf("%d %d",&x,&y);
if(x!=y)
{s1=vec[x].size();
s2=vec[y].size();
vec[x].push_back(muc(y,s2,false));
vec[y].push_back(muc(x,s1,false));
}
else
{vec[x].push_back(muc(x,s1,false));
}
}
init();
euler(1,prim);
for (nod *t=prim->urm;t->urm->n!=-1;t=t->urm)
{printf("%d ",t->n);
}
return 0;
}