Cod sursa(job #1250154)

Utilizator rebound212Mihnea Savu rebound212 Data 27 octombrie 2014 20:51:10
Problema Ciclu Eulerian Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
#include <vector>
#include <set>
#include <algorithm>
#include <cctype>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <cstring>
#include <string>
#include <cstdio>
#include <climits>
#include <list>
#define PII pair < int , int >
#define MP make_pair
#define PB push_back
#define F first
#define S second
#define LL long long
#define NMAX 20
using namespace std;
vector <int> G[100001];
vector <int> Q;
int m,n,i,x,y;
void euler (int x)
{
int w;
    if(G[x].empty())
    {
        printf("%d ",x);
        Q.pop_back();
    }
    else
    {
        for(vector <int> :: iterator it=G[x].begin(); it!=G[x].end() && !G[x].empty(); ++it)
        {   w=(*it);
            G[x].erase(it);
            for(vector <int> :: iterator it2=G[w].begin(); it2<=G[w].end() && !G[w].empty(); ++it2)
            {
                if((*it2)==x)
                {
                    G[w].erase(it2);
                    break;

                }
            }
          Q.PB(w);
          euler(w);
        }
    }
}
int main()
{

    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    scanf("%d %d",&n,&m);
    for (i=1; i<=m; i++)
    {
        scanf("%d %d",&x,&y);
        G[x].PB(y);
        G[y].PB(x);
    }
    for (i=1; i<=n; i++)
    {
        if (G[i].size()%2!=0)
        {
            printf("-1");
            return 0;
        }
    }
    euler(1);
     while(!Q.empty())
     {
         printf("%d ",Q.back());
         Q.pop_back();
     }

    return 0;
}