Pagini recente » Cod sursa (job #2958196) | Cod sursa (job #2783566) | Cod sursa (job #148769) | Cod sursa (job #373570) | Cod sursa (job #2999503)
#include <fstream>
#include<vector>
#include<stack>
using namespace std;
struct muchie{
int x,y,viz;
};
muchie mch[500001];
int ciclu[500005];
vector <int> g[100001];
stack<int> stk;
int n,m,x,y;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++){
fin>>x>>y;
mch[i].x=x;
mch[i].y=y;
g[x].push_back(i);
g[y].push_back(i);
}
for(int i=1;i<=n;i++)
if(g[i].size()%2!=0)
{
fout<<-1;
return 0;
}
int vec;
ciclu[1]=1;
stk.push(1);
int k=0;
while(!stk.empty()){
int nod=stk.top();
int ok=0;
while(!g[nod].empty()){
int nr=g[nod].back();
g[nod].pop_back();
if(mch[nr].viz==0){
int x=mch[nr].x, y=mch[nr].y;
if(nod==x)
vec=y;
else
vec=x;
stk.push(vec);
mch[nr].viz=1;
ok=1;
break;
}
}
if(ok==0){
ciclu[++k]=nod;
stk.pop();
}
}
if(k!=m+1){
fout<<-1;
return 0;
}
for(int i=1;i<k;i++)
fout<<ciclu[i]<<" ";
return 0;
}