Cod sursa(job #2819712)

Utilizator rimihaiMihai Radu-Ioan rimihai Data 18 decembrie 2021 21:10:32
Problema Ciclu Eulerian Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.8 kb
#include <bits/stdc++.h>
using namespace std;

#define nrnoduri 100005

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


int n,m;
vector<int> lista_adiacenta[nrnoduri];

int main()
{
    bool ok=true;

    fin>>n>>m;
    int st[m];
    int fi[m];
    bool vector_vizitat[m];
    vector_vizitat[m]= {false};

    for(int i=0; i<m; i++)
    {
        int x,y;
        fin>>x>>y;
        lista_adiacenta[x].push_back(i);
        lista_adiacenta[y].push_back(i);
        st[i]=x;
        fi[i]=y;
    }
    for(int i=1; i<=n; i++)
        if(lista_adiacenta[i].size() % 2 != 0 or lista_adiacenta[i].size() == 0)
        {
            fout<<-1<<'\n';
            ok=false;
            return 0;
        }

    if(ok==true)
    {
        vector<int> ciceuler;
        stack<int> stiva_noduri;
        stiva_noduri.push(1);

        while(!stiva_noduri.empty())
        {
            int nod = stiva_noduri.top();
            if(lista_adiacenta[nod].size()>0)
            {
                int muchie = lista_adiacenta[nod].back();
                lista_adiacenta[nod].pop_back();
                if(vector_vizitat[muchie]==false)
                {
                    if(nod!=st[muchie])
                    {
                        stiva_noduri.push(st[muchie]);
                    }
                    else
                    {
                        stiva_noduri.push(fi[muchie]);
                    }
                    vector_vizitat[muchie] = true;
                }
            }
            else
            {
                ciceuler.push_back(nod);
                stiva_noduri.pop();
            }
        }
        ciceuler.pop_back();
        for(int i=0; i<ciceuler.size(); i++)
            fout<<ciceuler[i]<<" ";
    }
    return 0;
}