Cod sursa(job #2574486)

Utilizator serafimalex2001Serafim Alex serafimalex2001 Data 5 martie 2020 22:51:33
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

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

const int NMAX = 1000009;

int viz[500009];

vector< pair<int,int> > Ad[NMAX];
vector<int> C;

int n,m;

void Read()
{
    int i,j,x,y;
    fin>>n>>m;
    for(i = 1; i<=m; ++i)
    {
        fin>>x>>y;
        Ad[x].push_back( {y,i} );
        Ad[y].push_back({x,i});
    }
}

void Euler(int nod)
{
    int i,w,state;
    for(i = 0; i<Ad[nod].size(); ++i)
    {
        w = Ad[nod][i].first;
        state = viz[Ad[nod][i].second];
        if(state == 0)
        {
            viz[Ad[nod][i].second] = 1;
            Euler(w);
        }
    }
    C.push_back(nod);
}

void Do()
{
    int i,j;
    Euler(1);
    for( i = 0; i<C.size()-1; ++i)
        fout<<C[i]<<" ";
}

int main()
{
    Read();
    for(int i = 1; i<=n; ++i)
    {
        if(Ad[i].size() % 2 == 1)
        {
            fout<<-1;
            return 0;
        }
    }
    Do();

    return 0;
}