Cod sursa(job #1559152)

Utilizator nnnmmmcioltan alex nnnmmm Data 30 decembrie 2015 12:38:15
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<cstdio>
#include<vector>
#include<stack>
#include<algorithm>
const int NMAX=100007;
int H[NMAX];
std::vector<int> V[NMAX],rasp;
std::stack<int> stiva;
int main()
{
 freopen("ciclueuler.in","r",stdin);
 freopen("ciclueuler.out","w",stdout);
 int n,m;
 scanf("%d %d",&n,&m);
 for(int i=1;i<=m;i++)
     {
      int x,y;
      scanf("%d %d",&x,&y);
      V[x].push_back(y);
      V[y].push_back(x);
      H[x]++;
      H[y]++;
     }
 for(int i=1;i<=n;i++)
     if(H[i]%2==1)
        {
         printf("-1");
         return 0;
        }
 stiva.push(1);
 while(!stiva.empty())
       {
        int q=stiva.top();
        if(V[q].size()==0)
           {
            rasp.push_back(q);
            stiva.pop();
            continue;
           }
        int sq=V[q][V[q].size()-1];
        stiva.push(sq);
        V[q].pop_back();
        V[sq].erase(find(V[sq].begin(),V[sq].end(),q));
       }
 for(int i=0;i<rasp.size();i++)
     printf("%d ",rasp[i]);
 return 0;
}