Pagini recente » Cod sursa (job #1279216) | Cod sursa (job #1112870) | Cod sursa (job #1531573) | Cod sursa (job #1082953) | Cod sursa (job #2658748)
#include <cstdio>
#include <vector>
#include <stack>
using namespace std;
vector<vector<int>> arcs;
vector<int> to, from, sol;
int main() {
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w",stdout);
int n, m, a, b, current_node, next_node;
scanf("%d%d", &n, &m);
arcs.resize(n+1);
to.resize(m+1);
from.resize(m+1);
for(int i=1; i<=m; ++i) {
scanf("%d%d", &a, &b);
arcs[a].push_back(i);
arcs[b].push_back(i);
to[i] = a;
from[i] = b;
}
stack<int> st;
st.push(1);
while(st.size()) {
current_node = st.top();
if(arcs[current_node].size()) {
a = arcs[current_node].back();
arcs[current_node].pop_back();
if (to[a] != 0) {
if (to[a] == current_node)
next_node = from[a];
else
next_node = to[a];
to[a] = 0;
st.push(next_node);
}
} else {
st.pop();
sol.push_back(current_node);
}
}
sol.pop_back();
for(int i=0; i<sol.size(); ++i)
printf("%d ", sol[i]);
printf("\n");
return 0;
}