Cod sursa(job #1194425)

Utilizator alevasluialeHuhurez Marius alevasluiale Data 3 iunie 2014 21:25:28
Problema Ciclu Eulerian Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <bitset>
#include <cstdio>
#include <cstdlib>
#include <vector>
using namespace std;
int r[500001];
int v[10051][10051];
vector <int>nd[10051];
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
inline void afisare(int nr)
{
    for(int i=1;i<=nr;i++) fout<<r[i]<<" ";
    exit(0) ;
}
inline void euler(int i,int nod,int nr)
{
    if(i!=nr+1)
    {
        for(vector <int>::iterator it=nd[nod].begin();it!=nd[nod].end();it++)
        {   if(v[nod][*it])
            {
            r[i]=*it;
            v[nod][*it]--;
            if(nod!=*it) v[*it][nod]--;
            euler(i+1,*it,nr);
            v[nod][*it]++;
            if(nod!=*it) v[*it][nod]++;
            }
        }
    }
    else if(v[nod][1])
    {
        afisare(nr);
    }
}
int main()
{
    int n,m,x,i=1,y;
    fin>>n>>m;
    while(i<=m)
    {   fin>>x>>y;
        nd[x].push_back(y);
        nd[y].push_back(x);
        v[x][y]++;
        if(x!=y) v[y][x]++;
        i++;
    }
        r[1]=1;
        euler(2,1,m);
    fout<<"-1";
}