Pagini recente » Cod sursa (job #2123337) | Cod sursa (job #649194) | Cod sursa (job #3323188) | Cod sursa (job #389349) | Cod sursa (job #3328257)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int NMAX = 100005, MMAX = 500005;
vector<int> G[MMAX];
vector<int> rez;
pair<int,int> muchii[MMAX];
void findEuler(int startNode){
bool used[MMAX] = {false};
stack<int> st;
st.push(startNode);
while(!st.empty()){
int nod = st.top();
if(!G[nod].empty()){
int indiceMuchie = G[nod].back();
G[nod].pop_back();
if(!used[indiceMuchie]){
used[indiceMuchie] = true;
int u = muchii[indiceMuchie].first;
int v = muchii[indiceMuchie].second;
int nodUrmator = (nod == u) ? v : u;
st.push(nodUrmator);
}
}
else{
st.pop();
rez.push_back(nod);
}
}
}
int main(){
int n,m;
f >> n >> m;
for(int i=1; i<=m; i++){
int x,y;
f >> x >> y;
G[x].push_back(i);
G[y].push_back(i);
muchii[i] = {x,y};
}
for(int i=1; i<=n; i++){
if(G[i].size() & 1){
g << -1;
return 0;
}
}
findEuler(1);
for(int i=0; i<rez.size(); i++){
g << rez[i] << " ";
}
return 0;
}