Cod sursa(job #2082056)

Utilizator dumitrescugeorgeGeorge Dumitrescu dumitrescugeorge Data 5 decembrie 2017 17:45:15
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <cstdio>
#include <vector>
#include <stack>
const int nmax=100010;
const int mmax=500010;
using namespace std;
vector <int> G[nmax];
stack <int> ST;
int n,m;
struct
{
    int nod1,nod2;
    bool sters=false;
}v[mmax];
void citire()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&v[i].nod1,&v[i].nod2);
        G[v[i].nod1].push_back(i);
        G[v[i].nod2].push_back(i);
    }
}
bool gradpar()
{
    for(int i=1;i<=n;i++)
    {
        if(G[i].size()%2==0)
            return true;
    }

        return false;
}
void euler()
{
    ST.push(1);
    while(!ST.empty())
    {
        int nod=ST.top();
        if(G[nod].size())
        {
            int vecin=G[nod].back();
            G[nod].pop_back();
            if(v[vecin].sters==true)
                continue;
            v[vecin].sters=true;
            if(v[vecin].nod1==nod)
            {
                ST.push(v[vecin].nod2);
            }
            else
                ST.push(v[vecin].nod1);
        }
        else
        {
            printf("%d ",ST.top());
            ST.pop();
        }
    }
}
int main()
{
    freopen("ciclueuler.in", "r", stdin);
    freopen("ciclueuler.out", "w", stdout);

   citire();
   if(gradpar()==false)
   {
       printf("-1");
       return 0;
   }
   else
    euler();
    return 0;
}