Pagini recente » Cod sursa (job #2914307) | Cod sursa (job #1147226) | Cod sursa (job #1851218) | Cod sursa (job #2710424) | Cod sursa (job #1589835)
#include <cstdio>
#include <vector>
#include <stack>
#include <cstring>
#define NMAX 100005
using namespace std;
struct punct
{
int x,y;
};
vector<punct>v[NMAX];
stack<int>st;
int n,m,i,x,y,cmp,ok;
int grd[NMAX],viz[NMAX];
punct per(int a,int b)
{
punct X;
X.x=a;X.y=b;
return X;
}
void DFS(int nod)
{
int i;
viz[nod]=1;
for(i=0;i<v[nod].size();++i)
{
int fiu=v[nod][i].x;
if(viz[fiu] == 0) DFS(fiu);
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;++i)
{
scanf("%d%d",&x,&y);
v[x].push_back(per(y,i));
v[y].push_back(per(x,i));
++grd[x];
++grd[y];
}
DFS(1);
ok=0;
for(i=1; i<=n; ++i)
{
if((viz[i] == 0 && grd[i]>0) || (grd[i] % 2 == 1))
{
printf("-1\n");
return 0;
}
}
memset(viz,0,sizeof(viz));
ok=1;
st.push(n);
while(!st.empty())
{
int x=st.top();
if(grd[x] == 0)
{
if(!ok) printf("%d ",x);
ok=0;
st.pop();
continue;
}
while(viz[v[x][v[x].size()-1].y] == 1) v[x].erase(v[x].end()-1);
viz[v[x][v[x].size()-1].y]=1;
st.push(v[x][v[x].size()-1].x);
--grd[x];
--grd[v[x][v[x].size()-1].x];
v[x].erase(v[x].end()-1);
}
return 0;
}