Pagini recente » Cod sursa (job #2119595) | Cod sursa (job #159653) | Cod sursa (job #2573342) | Cod sursa (job #3159014) | Cod sursa (job #1736230)
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
#include <algorithm>
#define NMAX 100005
using namespace std;
int N,M;
int grad[NMAX];
vector<int> graf[NMAX];
vector<int> ciclu;
stack<int> s;
void citire()
{
scanf("%d%d",&N,&M);
for(int i=1; i<=M; i++)
{
int x,y;
scanf("%d%d",&x,&y);
graf[x].push_back(y);
graf[y].push_back(x);
grad[x]++;
grad[y]++;
}
}
int grade()
{
for(int i=1; i<=N; i++)
if(grad[i]%2)
return 0;
return 1;
}
void elim(int n1,int n2)
{
graf[n1].erase(find(graf[n1].begin(),graf[n1].end(),n2));
graf[n2].erase(find(graf[n2].begin(),graf[n2].end(),n1));
grad[n1]--;
grad[n2]--;
}
void euler()
{
s.push(1);
while(!s.empty())
{
int c = s.top();
if(grad[c])
{
int x = graf[c].back();
elim(x,c);
s.push(x);
}
else
{
ciclu.push_back(c);
s.pop();
}
}
}
void afis()
{
for(vector<int>::iterator ii = ciclu.begin(); ii!= ciclu.end(); ii++)
{
printf("%d ",*ii);
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
if(grade())
{
euler();
afis();
}
else
{
printf("-1");
}
return 0;
}