Cod sursa(job #2327730)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 24 ianuarie 2019 20:50:12
Problema Ciclu Eulerian Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int VAL=500005;

int N, M, i, j, F, nr;
int A[VAL], B[VAL];
int st[VAL], top;
bool viz[VAL], gas;
vector <int> G[VAL];

void Euler_Cycle(int nod)
{
    if (top==M)
    {
        gas=true;
        for (int i=1; i<=M; i++)
            fout << st[i] << " ";
        return;
    }
    vector <int> :: iterator it;
    int nod2;
    for (it=G[nod].begin(); it!=G[nod].end(); it++)
    {
        if (viz[*it]==true)
            continue;
        nod2=A[*it];
        if (A[*it]==nod)
            nod2=B[*it];
        viz[*it]=true;
        st[++top]=nod2;
        Euler_Cycle(nod2);
        if (gas==true)
            return;
        top--;
        viz[*it]=false;
    }
}

int main()
{
    fin >> N >> M;
    for (i=1; i<=M; i++)
    {
        fin >> A[i] >> B[i];
        G[A[i]].push_back(i);
        G[B[i]].push_back(i);
    }
    for (i=1; i<=N; i++)
        if (G[i].size() % 2==1)
            nr++;
    if (nr>0)
    {
        fout << -1;
        fin.close();
        fout.close();
        return 0;
    }
    st[1]=top=1;
    Euler_Cycle(1);
    fin.close();
    fout.close();
    return 0;
}