Cod sursa(job #1250224)

Utilizator rebound212Mihnea Savu rebound212 Data 27 octombrie 2014 21:59:10
Problema Ciclu Eulerian Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.85 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;
bool ok=true;
int m,n,i,x,y;
void euler (int x)
{
    int w;

    {
        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);
        }
        if(G[x].empty() )
        {
            if(x==1)
            {
                if(ok)
                {
                    printf("%d ",x);
                    ok=false;
                }
            }
            else
            printf("%d ",x);

            Q.pop_back();
        }

    }
}
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();
     }*/
fclose(stdin);
    fclose(stdout);
    return 0;
}