Cod sursa(job #1490381)

Utilizator vladttturcuman vlad vladtt Data 23 septembrie 2015 13:14:24
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <vector>

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

vector<int> edge[100100],_stack;

int i,nr,neighbour,n,m,v,w;

void euler()
{
    int nod=1;

    _stack.push_back(nod);

    while(_stack.size())
    {
        nod=_stack.back();

        if(edge[nod].size()>=1)
        {
            neighbour=edge[nod].back();
            _stack.push_back(neighbour);
            edge[nod].pop_back();
            nr=edge[neighbour].size();
            for(i=0;i<nr;i++)
                if(edge[neighbour][i]==nod)
                {
                    edge[neighbour].erase(edge[neighbour].begin()+i);
                    break;
                }
        }
        else
        {

        _stack.pop_back();
            fout<<nod<<' ';
        }

    }


    return;
}

int main()
{

    fin>>n>>m;
    for(i=1;i<=m;i++)
    {

        fin>>v>>w;
        edge[v].push_back(w);
        edge[w].push_back(v);
    }

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


    euler();


    return 0;
}