Cod sursa(job #3357824)

Utilizator TestLicenta123Test Test TestLicenta123 Data 13 iunie 2026 15:19:29
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

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);
    }

    bool has_cycle = true;
    for (int i = 1; i <= n; ++i) {
        if (graph[i].size() % 2 == 1) has_cycle = false;
    }

    if (!has_cycle) output << -1;
    else {
        std::vector<bool> visited(n + 1, false);
        std::vector<int> circuit;
        std::queue<int> q;
        q.push(1);
        visited[1] = true;

        while (!q.empty()) {
            int node = q.front();
            q.pop();
            circuit.push_back(node);

            for (int neighbor : graph[node]) {
                if (!visited[neighbor]) {
                    visited[neighbor] = true;
                    q.push(neighbor);
                }
            }
        }

        for (int i = 0; i < circuit.size(); ++i) {
            output << circuit[i] << " ";
        }
    }
    return 0;
}