Cod sursa(job #2504018)

Utilizator RedXtreme45Catalin RedXtreme45 Data 4 decembrie 2019 10:48:00
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 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],v[Nmax],u;
queue <int> q;
vector <int> G[Nmax];
int DFS(int start)
{
    q.push(start);
    while (!q.empty())
    {
        int x=q.front();
        u++;
        v[u]=x;
        q.pop();
        for (auto j:G[x])
        {
            if (grad[j]>1)
            {
                grad[j]--;
                grad[x]--;
                q.push(j);
                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;
        }
    }
     i=1;
    if (OK==1){
            while (grad[i]==0)
            i++;
        if (i<=n)
        {
        DFS(i);
        OK=0;
        for (auto i:G[v[u]])
        {
            if (i==v[1])
                OK=1;
        }
        if (OK==1)
        {
            for (i=1;i<=u;i++)
            {
                fout<<v[i]<<" ";
            }
        }
        }
    }
    else
        fout<<-1;
    return 0;
}