Cod sursa(job #2158418)

Utilizator IustinPetrariuIustinian Petrariu IustinPetrariu Data 10 martie 2018 12:49:44
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 100001
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector < pair< int , int > > G[nmax];
int n,m,visited[nmax],k,sol[nmax],x,y;
void dfs(int node)
{
    int muchie,vecin;
    while(!G[node].empty())
    {
        vecin=G[node].back().first;
        muchie=G[node].back().second;
        G[node].pop_back();
        if(!visited[muchie])
        {
            visited[muchie]=1;
            dfs(vecin);
        }
    }
    k++;
    sol[k]=node;
}
int main()
{
    fin>>n>>m;
    for(int i =1 ; i <=m ;i++)
    {
        fin>>x>>y;
        G[x].push_back(make_pair(y,i));
        G[y].push_back(make_pair(x,i));

    }
    //verific grad
    for(int i = 1; i <= n ;i++)
    {
        if(G[i].size()%2==1)
        {
            fout<<-1;
            return 0;
        }
    }
    dfs(1);
    for(int i = 1; i < k ; i++)
        fout<<sol[i]<<" ";
    fout<<'\n';
}