Cod sursa(job #1836664)

Utilizator medicinedoctoralexandru medicinedoctor Data 28 decembrie 2016 15:56:00
Problema Ciclu Eulerian Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");

vector <vector <int> > a;
vector <int> x;

void read()
{
    int n,m;
    cin >> n >> m;
    a.resize(n+1);
    for (int x,y,i=0; i<m; i++)
    {
        cin >> x >> y;
        a[x].push_back(y);
        a[y].push_back(x);
    }
}

int i;

void del(int x, int y)
{
    for (int i=0; i<a[x].size(); i++)
    if (a[x][i]==y)
    {
        swap(a[x][i],a[x][a[x].size()-1]);
        a[x].pop_back();
        return;
    }
}

int c=0;

vector <int> eul(int v)
{
    vector <int> x,y;
    int w;
    c++;
    x.push_back(v);
    if (count(a[v].begin(),a[v].end(),i)!=0 && c>2) return x;
    while (a[v].size()!=0)
    {
        w=a[v][a[v].size()-1];
        a[v].pop_back();
        del(w,v);
        y=eul(w);
        if (y.size()!=0) break;
    }
    for (int i=0; i<y.size(); i++)
        x.push_back(y[i]);
    return x;
}

void write()
{
    if (x.size()<1) cout << "-1" ;
    else
        for (int i=0; i<x.size(); i++)
            cout << x[i] << ' ';
}

main()
{
    read();
    for (i=1; i<a.size(); i++)
    {
        x=eul(i);
        if (x.size()>1) break;
    }
    write();
}