Cod sursa(job #2318882)

Utilizator Username01Name Surname Username01 Data 13 ianuarie 2019 17:07:07
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <cstdio>
#include <deque>

using namespace std;
FILE *f,*g;

int start[100002], t[2][1000002], mu[1000002],gr[100002];
deque <int> v;
bool fr[1000002];

void eulerian(int nod)
{
    int poz,vecin;
    poz=start[nod];
    while(poz)
    {
        vecin=t[0][poz];
        if(fr[mu[poz]]==0)
            fr[mu[poz]]=1,eulerian(vecin);
        poz=t[1][poz];
    }
    v.push_back(nod);
}
int main()
{
    f=fopen("ciclueuler.in","r");
    g=fopen("ciclueuler.out","w");
    int m,n,k=0;
    int x,y;
    fscanf(f,"%d %d",&n,&m);
    for(int i=1;i<=m;++i)
    {
        fscanf(f,"%d %d",&x,&y);
        ++gr[x],++gr[y];
        t[0][++k]=y;
        t[1][k]=start[x];
        start[x]=k;
        mu[k]=i;
        t[0][++k]=x;
        t[1][k]=start[y];
        start[y]=k;
        mu[k]=i;
    }
    for(int i=1;i<=n;++i)
        if(gr[i]%2!=0)
    {
        fprintf(g,"-1");
        return 0;
    }
    eulerian(1);
    v.pop_back();
    while(!v.empty())
    {
        int x=v.front();
        v.pop_front();
        fprintf(g,"%d ",x);
    }
    fclose(f);
    fclose(g);
    return 0;
}