Cod sursa(job #2958689)

Utilizator Tudose_StefanTudose Alexandru Stefan Tudose_Stefan Data 27 decembrie 2022 20:05:39
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("ciclueulerian.in");
ofstream fout("ciclueulerian.out");

int n, m, i, nr1, nr2, aici, cuc;
vector <int>::iterator vecin;

int main()
{
    fin >> n >> m;
    vector <int> adjL[n+1];
    for (i = 0; i < m; ++i){
        fin >> nr1 >> nr2;
        adjL[nr1].push_back(nr2);
        adjL[nr2].push_back(nr1);
    }
    vector <int> ciclu;
    ciclu.reserve(2*m+1);
    stack <int> recurs;
    recurs.push(1);
    int nrmuch = 0;

    while (!recurs.empty()){
        aici = recurs.top();
        if (!adjL[aici].empty()){
            ++nrmuch;
            vecin = adjL[aici].begin();
            cuc  = *vecin;
            adjL[aici].erase(vecin);
            for (auto j = adjL[cuc].begin(); j < adjL[cuc].end(); ++j)
            if (*j == aici){
                adjL[cuc].erase(j);
                break;
            }

            recurs.push(cuc);
            continue;
        }
        ciclu.push_back(aici);
        recurs.pop();
    }
    if (nrmuch != m){
        fout << -1;
        return 0;
    }
    for (i = ciclu.size()-1; i >= 1; --i){
        fout << ciclu[i] << ' ';
    }
    return 0;
}