Pagini recente » Cod sursa (job #312638) | Cod sursa (job #2320170) | Cod sursa (job #2308082) | Cod sursa (job #1291135) | Cod sursa (job #1143079)
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#define nmax 100009
using namespace std;
struct vecini
{
vector<int> v;
};
vecini g[nmax];
queue<int> q;
stack<int> st;vector<int> ans;
int deg[nmax];
bool viz[nmax];
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
int i,j,n,m,x,y;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
g[x].v.push_back(y);deg[x]++;
g[y].v.push_back(x); deg[y]++;
}
q.push(1);
viz[1]=true;
while(q.empty()==0)
{
int top=q.front();
int lung=g[top].v.size();
for(i=0;i<lung;++i)
{
if(viz[g[top].v[i]]==false)
{
viz[g[top].v[i]]=true;
q.push(g[top].v[i]);
}
}
q.pop();
}
for(i=1;i<=n;i++)
{
if(viz[i]==false||deg[i]%2!=0)
{
printf("-1\n");
return 0;
}
}
st.push(1);
while(st.empty()==0)
{
x=st.top();
if(deg[x]>0)
{
deg[x]--;
int urm=g[x].v[0],lung;
deg[urm]--;
g[x].v.erase(g[x].v.begin());
lung=g[urm].v.size();
for(i=0;i<lung;++i)
if(g[urm].v[i]==x)
{
g[urm].v.erase(g[urm].v.begin()+i);
break;
}
st.push(urm);
continue;
}
ans.push_back(x);
st.pop();
}
int lung=ans.size()-2;
for(i=0;i<=lung;++i)
printf("%d ",ans[i]);
}