Cod sursa(job #1757830)

Utilizator preda.andreiPreda Andrei preda.andrei Data 15 septembrie 2016 22:09:43
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

#define NMAX 100001

vector<int> muchii[NMAX];
vector<int> stiva;

void stergeMuchie(int x, int y);

int main()
{
    ifstream fin("ciclueuler.in");
    ofstream fout("ciclueuler.out");

    int n, m;
    fin >> n >> m;

    while (m--) {
        int x, y;
        fin >> x >> y;
        muchii[x].push_back(y);
        muchii[y].push_back(x);
    }

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

    stiva.push_back(1);
    while (!stiva.empty()) {
        int curent = stiva.back();

        if (!muchii[curent].empty()) {
            int vecin = muchii[curent].back();
            muchii[curent].pop_back();

            stergeMuchie(vecin, curent);
            stiva.push_back(vecin);
        }
        else {
            if (stiva.size() > 1)
                fout << curent << " ";
            stiva.pop_back();
        }
    }

    return 0;
}

void stergeMuchie(int x, int y)
{
    for (int i = muchii[x].size() - 1; i >= 0; --i) {
        if (muchii[x][i] == y) {
            muchii[x].erase(muchii[x].begin() + i);
            break;
        }
    }
}