Pagini recente » Cod sursa (job #2524886) | Cod sursa (job #3276279) | Cod sursa (job #563) | Cod sursa (job #1976315) | Cod sursa (job #1018475)
#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[100000];
int gr[100001],st[500001],i,n,m,x,y,cd[100001],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;
if (gr[st[p]]>0)df(l[st[p]],st[p]);
else ok=1;
}
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;
}