Pagini recente » Cod sursa (job #66328) | Cod sursa (job #1732710) | Cod sursa (job #362333) | Cod sursa (job #2631503) | Cod sursa (job #611910)
Cod sursa(job #611910)
#include<fstream>
using namespace std;
struct nod{int info; nod *adr;}*v[100010];
int i,x,y,n,m,vf=1,ce[500010];
nod *p;
void elimina_muchie(int a,int b)
{
nod *p=v[ce[a]];
if(v[ce[a]]->info==ce[b]) v[ce[a]]=v[ce[a]]->adr;
else
{
while(p->adr->info!=ce[b]) p=p->adr;
p->adr=p->adr->adr;
}
nod *q=v[ce[b]];
if(v[ce[b]]->info==ce[a]) v[ce[b]]=v[ce[b]]->adr;
else
{
while(q->adr->info!=ce[a]) q=q->adr;
q->adr=q->adr->adr;
}
}
void un_ciclu(int ind)
{
p=v[ce[ind]];
while(p)
{
for(i=++vf;i>ind;i--)ce[i]=ce[i-1];
ce[++ind]=p->info;
elimina_muchie(ind-1,ind);
p=p->adr;
un_ciclu(ind);
}
}
int main()
{
ifstream f("ciclueuler.in");ofstream g("ciclueuler.out");
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
nod *p=new nod;
p->info=y; p->adr=v[x]; v[x]=p;
nod *q=new nod;
q->info=x; q->adr=v[y]; v[y]=q;
}
ce[1]=1;
for(i=1;ce[i];i++)
un_ciclu(i);
if(ce[m+1]!=1)g<<-1;
else
for(i=1;i<=m;i++) g<<ce[i]<<" ";
f.close();g.close();
return 0;}