Pagini recente » Cod sursa (job #2051786) | Cod sursa (job #2315108) | Cod sursa (job #321530) | Cod sursa (job #1419290) | Cod sursa (job #368234)
Cod sursa(job #368234)
#include <fstream>
#include <vector>
using namespace std;
ifstream fi("ciclueuler.in");
ofstream fo("ciclueuler.out");
vector<int> viz;
vector<pair<int,int> > rel[100010];
int rez[500010],vf,N,M,nr;
pair<int,unsigned int> st[500010];
int grad[100010];
int ok=1;
void citire(){
fi>>N>>M;
int x,y;
for (int i=1;i<=M;++i){
fi>>x>>y;
rel[x].push_back(make_pair(y,i-1));
rel[y].push_back(make_pair(x,i-1));
viz.push_back(0);
++grad[x];++grad[y];
}
fi.close();
for (int i=1;i<=N;++i) if (grad[i]%2) { ok=0;return ;}
}
void euler(){
vf=1;
st[vf].first=1;
st[vf].second=0;
while (vf){
if (st[vf].second>=rel[st[vf].first].size()){
rez[++nr]=st[vf].first;
--vf;
} else if (viz[rel[st[vf].first][st[vf].second].second]==0){
viz[rel[st[vf].first][st[vf].second].second]=1;
++vf;
st[vf].first=rel[st[vf-1].first][st[vf-1].second].first;
st[vf].second=0;
} else ++st[vf].second;
}
}
int main(){
citire();
nr=0;
if (ok){
euler();
for (int i=2;i<nr;++i) fo<<rez[i]<<" ";
fo<<rez[nr]<<"\n";} else { fo<<"-1\n"; }
fo.close();
return 0;
}