Pagini recente » Cod sursa (job #730265) | Cod sursa (job #41031) | Cod sursa (job #3209324) | Cod sursa (job #2537893) | Cod sursa (job #1018504)
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
FILE *f=fopen("ciclueuler.in","r");
FILE *g=fopen("ciclueuler.out","w");
vector<int>l[100005];
int gr[100005],st[500005],i,n,m,x,y,cd[500005],p,nr,k,ok=0;
int verif()
{
int i,ok=0;
for(i=1;i<=n;i++)
{
gr[i]=l[i].size();
if ((l[i].size())%2==1)ok=1;
}
if (ok==0)return 1;
else return 0;
}
void df(vector<int>c,int i)
{
for (vector<int>::iterator it=c.begin();it!=c.end();++it)
if (ok==0)
{
x=*it;
gr[x]--;
gr[i]--;
st[nr]=x;
l[i].erase(l[i].begin());
l[x].erase(find(l[x].begin(),l[x].end(),i));
nr++;
if (st[p]==*it)
{
nr-=1;
k++;
cd[k]=st[p];
p=nr-1;
while (gr[st[p]]==0 && p>0)p--;
if (gr[st[p]]==0)ok=1;
else df(l[st[p]],st[p]);
}
else if (gr[x]>=0) df(l[x],x);
}
}
int main()
{
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d",&x,&y);
l[x].push_back(y);
l[y].push_back(x);
}
if (verif()==0)fprintf(g,"%d",-1);
else
{nr=2;p=1;st[1]=1;
df(l[1],1);
nr--;
for(i=1;i<=nr;i++)
fprintf(g,"%d ",st[i]);
for(i=k;i>=2;i--)
fprintf(g,"%d ",cd[i]);
}
fclose(g);
return 0;
}