Cod sursa(job #3357786)

Utilizator TestLicenta123Test Test TestLicenta123 Data 13 iunie 2026 14:51:43
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>

int main() {
    std::ifstream input("ciclueuler.in");
    std::ofstream output("ciclueuler.out");

    int n, m;
    input >> n >> m;

    std::vector<std::vector<int>> graph(n + 1);

    for (int i = 0; i < m; ++i) {
        int x, y;
        input >> x >> y;
        graph[x].push_back(y);
        graph[y].push_back(x);
    }

    for (int i = 1; i <= n; ++i) {
        if (graph[i].size() % 2 == 1) {
            output << -1;
            return 0;
        }
    }

    std::stack<int> st;
    std::vector<int> cycle;
    st.push(1);

    while (!st.empty()) {
        int u = st.top();
        if (graph[u].empty()) {
            cycle.push_back(u);
            st.pop();
        } else {
            int v = graph[u].back();
            graph[u].pop_back();
            auto it = std::find(graph[v].begin(), graph[v].end(), u);
            graph[v].erase(it);
            st.push(v);
        }
    }

    for (int i = cycle.size() - 1; i >= 0; --i) {
        output << cycle[i] << " ";
    }

    return 0;
}