Cod sursa(job #1529611)

Utilizator sicsicFMI-Coteanu Vlad sicsic Data 21 noiembrie 2015 08:52:40
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<fstream>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
struct lista{int nod,ord;
             lista *leg;} *G[100007];
int n,m,i,Sol[500007],l,lim=0,V[500007],C[100007];
void adaug(int i,int j,int o)
{
    lista *p;
    p=new lista;
    p->nod=j;
    p->leg=G[i];
    p->ord=o;
    G[i]=p;
}
void citire()
{
    int i,j;
    f>>n>>m;
    for(l=1;l<=m;++l)
    {
        f>>i>>j;
        C[i]++; C[j]++;
        adaug(i,j,l);
        adaug(j,i,l);
    }
}
void Euler(int nod)
{
    lista *p;
    for(p=G[nod];p;p=p->leg)
    {
          if(!V[p->ord])
          {
            V[p->ord]=1;
            Euler(p->nod);
          }
    }
    Sol[++lim]=nod;
}
int EulerCheck()
{
    int i;
    for(i=1;i<=n;++i) if(C[i]%2) return 1;
    return 0;
}
int main()
{
    citire();
    if(EulerCheck())
    {
        g<<"-1"<<'\n';
        return 0;
    }
    Euler(1);
    for(i=1;i<lim;++i) g<<Sol[i]<<" ";
    g<<'\n';
    return 0;
}