Pagini recente » Cod sursa (job #314988) | Cod sursa (job #2171271) | Cod sursa (job #390951) | Cod sursa (job #2615768) | Cod sursa (job #917554)
Cod sursa(job #917554)
#include<stdio.h>
#include<list>
#include<vector>
#include<stack>
#define pb push_back
#define maxn 100005
using namespace std;
int n,m;
int g[maxn],v[maxn];
list <int> l[maxn];
stack <int> s;
vector <int> sol;
void cit()
{
int i;
int x,y;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
l[x].pb(y);
l[y].pb(x);
g[x]++; g[y]++;
}
}
void df(int k)
{
v[k]=1;
for(list<int>::iterator it=l[k].begin();it!=l[k].end();it++)
if(v[*it]==0)
df(*it);
}
int verif()
{
int i;
df(1);
for(i=1;i<=n;i++)
if(v[i]==0 || g[i]%2!=0)
return 0;
return 1;
}
void del(int k,int val)
{
list<int>::iterator it;
it=l[k].begin();
while(*it!=val) it++;
l[k].erase(it);
}
void euler(int k)
{
list<int>::iterator it;
int p,i;
p=k;
do
{
it=l[p].begin();
i=*it;
g[p]--; g[i]--;
l[p].pop_front();
del(i,p);
s.push(i);
p=i;
}while(p!=k);
}
void solve()
{
int k;
s.push(1);
while(!s.empty())
{
k=s.top();
if(g[k]==0) { sol.pb(k); s.pop();}
else
euler(k);
}
for(unsigned int i=0;i<sol.size();i++)
printf("%d ",sol[i]);
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
cit();
if(verif()) solve();
else
printf("-1");
fclose(stdin);
fclose(stdout);
return 0;
}