Pagini recente » Cod sursa (job #1324830) | Cod sursa (job #1511515) | Cod sursa (job #2035659) | Cod sursa (job #1891272)
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
#include<stack>
#define DM 500100
#define DN 100100
using namespace std;
fstream fin("ciclueuler.in",ios::in),fout("ciclueuler.out",ios::out);
queue<int> r;
stack<int> st;
vector<int> v[DN];
struct str
{
int a,b,viz;
} much[DM];
int n,m;
void eulerian()
{
int nod,i,aux,urm,pas=0;
st.push(1);
while(st.empty()==0)
{
nod=st.top();
while(v[nod].empty()==0)
{
aux=v[nod].back();
if(much[aux].viz==1)
{
v[nod].pop_back();
continue;
}
much[aux].viz=1;
urm=much[aux].a+much[aux].b-nod;
st.push(urm);
break;
}
if(v[nod].empty()==1)
{
st.pop();
r.push(nod);
//cout<<nod<<" ";
}
}
}
int main()
{
int a,b,i;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>a>>b;
much[i]={a,b,0};
v[a].push_back(i);
v[b].push_back(i);
}
for(i=1;i<=n;i++)
{
if(v[i].size()%2==1)
{
fout<<"-1\n";
return 0;
}
}
eulerian();
while(r.size()>1)
{
fout<<r.front()<<" ";
r.pop();
}
}