Cod sursa(job #2123816)

Utilizator VladG26Ene Vlad-Mihai VladG26 Data 6 februarie 2018 17:37:16
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
using namespace std;
vector <pair<int,int> > G[100005];
bool viz[500005];
vector <int> sol;
stack <int> fii;
int n,m;
bool citire()
{
    scanf("%d%d",&n,&m);
    int aux1,aux2;
    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));
    }
    for(int i=1;i<=n;i++)
        if(G[i].size()%2)
            return false;
    return true;
}
void cicluEuler(int nodS)
{
    int nodCurent;
    fii.push(nodS);
    while(!fii.empty())
    {
        nodCurent=fii.top();
        if(!G[nodCurent].empty())
        {
            if(viz[G[nodCurent].back().second]==0)
            {
                fii.push(G[nodCurent].back().first);
                viz[G[nodCurent].back().second]=1;
            }
            G[nodCurent].pop_back();
        }
        else
        {
            fii.pop();
            sol.push_back(nodCurent);
        }
    }
}
int main()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    if(citire())
    {
        cicluEuler(1);
        for(int i=0;i<sol.size()-1;i++)
            printf("%d ",sol[i]);
    }
    else
        printf("-1");
    return 0;
}