Cod sursa(job #2537192)

Utilizator RedXtreme45Catalin RedXtreme45 Data 3 februarie 2020 11:55:03
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>
#define Nmax 100001
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,nr,grad[Nmax],OK,ap[Nmax];
struct ceva{
    int Nod,numar;
};
vector <ceva> G[Nmax];
vector <int> sol;
void euler(int start)
{
    for (auto i:G[start]){
       int x=i.Nod;
       int y=i.numar;
       if (ap[y]==0)
       {
           ap[y]=1;
           euler(x);
       }
    }
    nr++;
    sol.push_back(start);
    return;
}
int main()
{
    int a,b,i,j;
    fin>>n>>m;
    for (i=1;i<=m;i++)
    {
        fin>>a>>b;
        G[a].push_back({b,i});
        G[b].push_back({a,i});
        grad[a]++;
        grad[b]++;
    }
    for (i=1;i<=n;i++){
        if (grad[i]%2==1)
        {
            OK=-1;
            break;
        }
    }
    if (OK==-1){
        fout<<-1;
    }
    else{
        euler (1);
            sol.pop_back();
            for (vector <int> :: iterator it=sol.end();it!=sol.begin();--it){
                fout<<*it<<" ";
            }
        }


    return 0;
}