Cod sursa(job #2082081)

Utilizator VladG26Ene Vlad-Mihai VladG26 Data 5 decembrie 2017 18:13:09
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
using namespace std;
int vizMuchii[500005],N,M;
vector <pair<int,int> > G[100005];
vector <int> sol;
stack <int> fii;
void citire()
{
    int aux1,aux2;
    scanf("%d%d",&N,&M);
    for(int i=1; i<=M; i++)
    {
        scanf("%d%d",&aux1,&aux2);
        G[aux1].push_back(make_pair(aux2,i));
        G[aux2].push_back(make_pair(aux1,i));
    }
}
bool euler()
{
    for(int i=1; i<=N; i++)
        if(G[i].size()%2)
            return false;
    return true;
}
void ciclu(int startNod)
{
    int nrMuchie,fiu,nodCurent;
    fii.push(startNod);
    while(!fii.empty())
    {
        nodCurent=fii.top();
        if(!G[nodCurent].empty())
        {
            nrMuchie=G[nodCurent].back().second;
            fiu=G[nodCurent].back().first;
            G[nodCurent].pop_back();
            if(!vizMuchii[nrMuchie])
            {
                fii.push(fiu);
                vizMuchii[nrMuchie]=1;
            }
        }
        else
        {
            fii.pop();
            sol.push_back(nodCurent);
        }
    }
}
int main()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    citire();
    if(euler())
    {
        ciclu(1);
        for(int i=0; i<sol.size(); i++)
            printf("%d ",sol[i]);
    }
    else
        printf("-1");

    return 0;
}