Pagini recente » Borderou de evaluare (job #1036344) | Cod sursa (job #827949) | Cod sursa (job #2150844) | Cod sursa (job #1087006) | Cod sursa (job #1263899)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define N 100004
using namespace std;
vector <int> a[N];
int q[N],gr[N],v[N];
int n,m;
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;
for(i=1; i<=n; i++)
if(!v[i])
DFS(i);
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 k)
{
int i,j;
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();
Euler(i);
}
q[++poz]=k;
}
int main()
{
R();
if(IsConex() && Grad())
{
Euler(1);
int i;
for(i=1; i<=poz; i++)
fout<<q[i]<<" ";
}
else
cout<<"-1";
return 0;
}