Cod sursa(job #1136854)

Utilizator Paula-ElenaPaula-Elena Margarit Paula-Elena Data 9 martie 2014 11:21:25
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#include <vector>
using namespace std;

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

const int MAXN = 100009;

int N, M, sol[MAXN*5], l;
vector < int > ind[MAXN];
bool used[MAXN*5];

struct muchii
{
    int unu, doi;
}   v[MAXN*5];

void citire()
{
    fin >> N >> M;
    for (int i = 1; i <= M; ++i)
    {
        int x, y;
        fin >> x >> y;
        v[i].unu = x, v[i].doi = y;
        ind[x].push_back(i);
        ind[y].push_back(i);
    }
}

inline int varf(int nod, int val)
{
    if ( v[nod].unu == val )
        return v[nod].doi;
    return v[nod].unu;
}

inline void ciclu_euler(int tata)
{
    int L = ind[tata].size();

    for (int i = 0; i < L; ++i)
    {
        int indice = ind[tata][i];
        if ( !used[indice] )
        {
            used[indice] = true;
            int fiu = varf(indice, tata);
            ciclu_euler(fiu);
        }
    }

    sol[++l] = tata;
}

int main ()
{
    citire();

    ciclu_euler(1);

    if ( l == M + 1 )
    {
        for (int i = 1; i <= M; ++i)
            fout << sol[i] << " ";
    }
    else
        fout << -1;

    fin.close();
    fout.close();

    return 0;
}