Pagini recente » Cod sursa (job #1924947) | Cod sursa (job #2858927) | Cod sursa (job #912636) | Cod sursa (job #2978413) | Cod sursa (job #1263965)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define N 100004
using namespace std;
vector <int> a[N];
int q[10*N],st[10*N],gr[N],v[N];
int n,m,top;
int poz;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
void R()
{
fin>>n>>m;
int i,x,y;
for(i=1; i<=m; i++)
{
fin>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
gr[x]++;
gr[y]++;
}
}
void DFS(int k)
{
v[k]=1;
for(int i=0; i<a[k].size(); i++)
if(!v[a[k][i]])
DFS(a[k][i]);
}
bool IsConex()
{
int i;
DFS(1);
for(i=1; i<=n; i++)
if(v[i]==0) return 0;
return 1;
}
bool Grad()
{
int i;
for(i=1; i<=n; i++)
if(gr[i]%2==1) return 0;
return 1;
}
void Euler()
{
int i,j,k;
top=1;
st[top]=1;
while(top>0)
{
k=st[top];
while(a[k].size()>0)
{
i=a[k][0];
swap(a[k][0],a[k][a[k].size()-1]);
a[k].pop_back();
for(j=0; j<a[i].size() && a[i][j]!=k; j++) ;
swap(a[i][j],a[i][a[i].size()-1]);
a[i].pop_back();
st[++top]=i;
k=st[top];
}
top--;
q[++poz]=k;
}
}
int main()
{
R();
if(IsConex() && Grad())
{
Euler();
int i;
for(i=1; i<=poz; i++)
fout<<q[i]<<" ";
}
else
cout<<"-1";
return 0;
}