Pagini recente » Diferente pentru schimbare-borland/alternativa intre reviziile 14 si 13 | Diferente pentru schimbare-borland/alternativa intre reviziile 12 si 13 | Cod sursa (job #2423993) | Cod sursa (job #2262163) | Cod sursa (job #2421193)
//#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
struct adat
{
int p,h;
bool lat;
};
struct el
{
int t;
int m;
vector<adat>e;
};
vector<el>x;
deque<int>meg,v;
bool p;
int n,m,i,a,b,k,k1;
int euler(int csp)
{
int i;
v.push_front(csp);
for(i=x[csp].t;i<x[csp].e.size();++i)
{
if(!x[csp].e[i].lat)
{
x[csp].e[i].lat=1;
x[csp].t=i;
k=x[csp].e[i].h;
k1=x[csp].e[i].p;
x[k1].e[k].lat=1;
x[csp].m++;
x[k1].m++;
euler(x[csp].e[i].p);
}
else
{
if(x[csp].m==x[csp].e.size()) break;
}
}
meg.push_front(v.front());
v.pop_front();
}
int main()
{
ios_base::sync_with_stdio(false);
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});
}
if(a==b)
{
x[a].e.push_back({b,x[b].e.size()+1,0});
x[b].e.push_back({a,x[a].e.size()-1,0});
}
}
p=false;
for(i=1;i<=n;++i)
{
if(x[i].e.size()%2!=0)
{
p=true;
break;
}
}
if(p==true) cout<<"-1";
/*for(i=1;i<=n;++i)
{
cout<<i<<": ";
for(auto e:x[i].e)
cout<<e.p<<" "<<e.h<<" "<<e.lat<<"\n";;
cout<<"\n";
}
*/
if(p==false)
{
euler(1);
for(i=0;i<meg.size()-1;++i)
cout<<meg[i]<<" ";
}
return 0;
}