Cod sursa(job #2158447)

Utilizator IustinPetrariuIustinian Petrariu IustinPetrariu Data 10 martie 2018 13:00:37
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
#define nmax 100005
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector < pair< int , int > > G[nmax];
stack < int > S;
int n,m,visited[nmax*5],k,sol[nmax*5],x,y,nodStiva;
void dfs(int nod)
{
   int nodStiva, vecin, indMuchie;
    S.push(nod);
    while(!S.empty()) {
        nodStiva=S.top();
        if( !G[nodStiva].empty()){
            vecin=G[nodStiva].back().first;
            indMuchie = G[nodStiva].back().second;
            G[nodStiva].pop_back();
            if(!visited[indMuchie]) {
                visited[indMuchie] = true;
                S.push(vecin);
            }
        }
        else{
            k++;
            sol[k]=nodStiva;
            S.pop();
           // if(S.empty() == false) fout<<nodStiva<<" ";
        }
    }
}
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';
}