Pagini recente » Cod sursa (job #1429830) | Cod sursa (job #1429712) | Cod sursa (job #1455184) | Cod sursa (job #1007473) | Cod sursa (job #2419120)
#include <fstream>
#include <vector>
#include <deque>
#include <stack>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
int n,m,i,a,b;
struct el
{
int p,h; ///p-az el masik vege, h-az adott csp helye a p elei kozott
bool l; ///l-vegig mentem-e mar azon az elen
};
struct adat
{
int t; ///t-hol tratok az e vektorban
vector<el>e; ///hova vezet ut az adott csp-bol
};
vector<adat>x;
deque<int>megold;
stack<int>s;
void euler(int csp)
{
int i;
el k;
s.push(csp);
for(i=x[csp].t;i<x[csp].e.size();++i)
{
k=x[csp].e[i];
if(!k.l)
{x[csp].t=i;
x[csp].e[i].l=1;
x[k.p].e[k.h].l=1;
euler(k.p);
}
}
megold.push_front(csp);
s.pop();
}
int main()
{
cin>>n>>m;
x.resize(n+1);
for(i=1;i<=m;++i)
{
cin>>a>>b;
if(a!=b)
{
x[a].e.push_back({b,x[b].e.size(),0});
x[b].e.push_back({a,x[a].e.size()-1,0});
}
else
{
x[a].e.push_back({b,x[b].e.size()+1,0});
x[b].e.push_back({a,x[a].e.size()-1,0});
}
}
bool ok=true;
for(i=1;i<=n;++i)
if(x[i].e.size()%2)
{
ok=false;
break;
}
/* else{
for(auto f : x[i].e) cout<<f.p<<" "<<f.h<<" ";
cout<<"\n";
}*/
if(!ok) cout<<"-1\n";
else
{
euler(1);
megold.pop_back();
for(auto e : megold) cout<<e<<" ";
}
return 0;
}