Cod sursa(job #878050)

Utilizator ard_procesoareLupicu ard_procesoare Data 13 februarie 2013 20:29:57
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
#define NMAX 100010
#define NMAX2 5000050
vector <int> v[NMAX];
int n,m,sir[NMAX2],poz;
void fx(int nod)
{
    int a,k;
    while(v[nod].size())
    {
        k=0;
        for(int i=0;i<v[nod].size();i++)
        {
            if(v[v[nod][i]].size())
            {
                k=i;
                break;
            }
        }
        a=v[nod][k];
        //fout<<a<<" "<<v[nod][v[nod].size()-1]<<"\n";
        v[nod][k]=v[nod][v[nod].size()-1];
        v[nod].pop_back();
        for(int i=0;i<v[a].size();i++)
        {
            if(v[a][i]==nod)
            {
                v[a][i]=v[a][v[a].size()-1];
                v[a].pop_back();
                break;
            }
        }
        //sir[++poz]=nod;
        fx(a);
    }
    sir[++poz]=nod;
}
void read()
{
    fin>>n>>m;
    int a,b;
    for(int i=0;i<m;i++)
    {
        fin>>a>>b;
        v[a].push_back(b);
        v[b].push_back(a);
    }
}
void tipar()
{
    for(int i=1;i<poz;i++) fout<<sir[i]<<" ";
}
int main()
{
    read();
    int i;
    for(i=1;i<=n;i++)
    {
        if(v[i].size()%2!=0)
        {
            fout<<-1;
            return 0;
        }
    }
    fx(1);
    tipar();
   // fout<<endl<<v[3].size();
}