Cod sursa(job #1661438)

Utilizator CalarisPredut Denis Stefanita Calaris Data 23 martie 2016 21:11:04
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <stack>

using namespace std;

#define MAX 100005

vector<int> V[MAX],ans;
stack<int> q;

void euler(int node);
fstream f("ciclueuler.in",ios::in);
ofstream g("ciclueuler.out");

int main()
{
    int N,M,i,x,y;
    f>>N>>M;

    for(i=0;i<M;++i)
        {
        f>>x>>y;
        V[x].push_back(y), V[y].push_back(x);
        }
    for(i=1;i<=N;++i)
        if(V[i].size()%2!=0)
            {
            g<<-1;
            return 0;
            }
    euler(1);

    for(i=0;i<ans.size()-1;++i)g<<ans[i]<<" ";


    return 0;
}

void euler(int node)
{
   q.push(node);

    while (!q.empty())
    {
        int i = q.top();

        if (V[i].size() > 0)
        {
            int next = V[i].back();
            V[i].pop_back();
            q.push(next);
            V[next].erase(find(V[next].begin(), V[next].end(), i));
        }
        else
        {
            q.pop();
            ans.push_back(i);
        }
    }
}