Cod sursa(job #2658747)

Utilizator akumariaPatrascanu Andra-Maria akumaria Data 14 octombrie 2020 22:09:18
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#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(n+1);
	from.resize(n+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;
}