Cod sursa(job #2502892)

Utilizator RedXtreme45Catalin RedXtreme45 Data 1 decembrie 2019 19:33:03
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <vector>
#include <queue>
#define Nmax 100001
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,grad[Nmax];
queue <int> q;
vector <int> v;
vector <int> G[Nmax];
int DFS(int start)
{
    q.push(start);
    while (!q.empty())
    {
        int x=q.front();
        v.push_back(x);
        q.pop();
        for (auto i:G[x])
        {
            if (grad[i]>1)
            {
                grad[i]--;
                grad[x]--;
                q.push(i);
                break;
            }
        }
    }
}
int main()
{
    int a,b;
    int i;
    fin>>n>>m;
    for (i=1;i<=m;i++)
    {
        fin>>a>>b;
        grad[a]++;
        grad[b]++;
        G[a].push_back(b);
        G[b].push_back(a);
    }
    int OK=1;
    for (i=1;i<=n;i++)
    {
        if (grad[i]%2==1){
            OK=0;
            break;
        }
    }
    if (OK==1){
        DFS(1);
        for (auto i:v)
            fout<<i<<" ";
    }
    else
        fout<<-1;
    return 0;
}