Cod sursa(job #1378293)

Utilizator httpsLup Vasile https Data 6 martie 2015 11:27:45
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;

ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

#define foor(it,v) for(__typeof(v.begin()) it=v.begin();it!=v.end();++it)
#define cout g
int n,m,i;
struct eee
    {
    int a,b;
    };
vector<eee> muc;
vector<vector<int> >G;
vector<bool> on;
vector<int> grad;
void euler(int nod)
    {
    foor(it,G[nod]) if(on[*it])
        {
        on[*it]=false;
        euler(muc[*it].a==nod ? muc[*it].b:muc[*it].a);
        }
    cout<<nod<<' ';
    }

int main()
    {
    f>>n>>m;
    muc.resize(m+1);
    G.resize(n+1);
    on.resize(m+1,true);
    grad.resize(n+1);
    for(i=1; i<=m; ++i)
        {
        f>>muc[i].a>>muc[i].b;
        ++grad[muc[i].a];
        ++grad[muc[i].b];
        G[muc[i].a].push_back(i);
        G[muc[i].b].push_back(i);
        }
    for(i=1; i<=n; ++i) if(grad[i]&1)
            {
            cout<<"-1";
            return 0;
            }
    euler(1);
    return 0;
    }