Pagini recente » Cod sursa (job #597971) | Cod sursa (job #800959) | Cod sursa (job #1867405) | Cod sursa (job #918124) | Cod sursa (job #880715)
Cod sursa(job #880715)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
FILE *f=fopen("ciclueuler.in","r"),*g=fopen("ciclueuler.out","w");
const int maxn=100005;
int n,m,i,a,b,grad[maxn],k,coada[maxn];
bool viz[maxn],valid;
vector <int> x[maxn],afis;
stack <int> E;
void bf(int nod)
{
int inc=1,sf=1;
coada[1]=nod;
while(inc<=sf)
{
nod=coada[inc];
for(i=0;i<x[nod].size();viz[x[nod][i]]=true , i++)
if(viz[x[nod][i]]==false)
coada[++sf]=x[nod][i];
inc++;
}
}
int search(int a,int b)
{
for(int i=0;i<x[b].size();i++)
if(x[b][i]==a)
return i;
}
void del(int a,int b)
{
x[a].erase(x[a].begin());
x[b].erase(x[b].begin()+search(a,b));
}
void expand(int nod)
{
while(x[nod].size())
{
E.push(x[nod][0]);
del(nod,x[nod][0]);
nod=E.top();
}
}
void write()
{
vector <int>::iterator it;
for(it=afis.begin()+1;it<afis.end();it++)
fprintf(g,"%d ",*it);
fprintf(g,"\n");
}
void read()
{
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d",&a,&b);
x[a].push_back(b);
x[b].push_back(a);
grad[a]++;
grad[b]++;
}
valid=true;
bf(1);
for(i=1;i<=n;i++)
if(viz[i]==false||grad[i]%2==1)
break;
if(i<=n)
valid=false;
if(valid==true)
{
E.push(1);
while(!E.empty())
{
expand(E.top());
afis.push_back(E.top());
E.pop();
}
write();
}
else
fprintf(g,"-1\n");
}
int main()
{
read();
return 0;
}