Cod sursa(job #1490377)

Utilizator vladttturcuman vlad vladtt Data 23 septembrie 2015 13:11:04
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 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[v].size()%2==1 || edge[v].size()==0)
        {
            fout<<-1;
            return 0;
        }
    }

    euler();


    return 0;
}