Cod sursa(job #1017180)

Utilizator lehman97Dimulescu David lehman97 Data 27 octombrie 2013 13:56:28
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

FILE *f=fopen("ciclueuler.in","r");
FILE *g=fopen("ciclueuler.out","w");

vector<int> v[100001],sol;
int n,m,i,a,b,s[100001];

void df(int x);
bool verif();
int main()
{
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {
        fscanf(f,"%d%d",&a,&b);
        v[a].push_back(b);
        v[b].push_back(a);
    }
    if(verif())
    {
        df(1);
        for(i=0;i<sol.size()-1;i++)
        fprintf(g,"%d ",sol[i]);

    } else fprintf(g,"%d",-1);
    fclose(g);
    return 0;
}
bool verif()
{
    for(i=1;i<=n;i++)
    if(v[i].size()%2!=0)return 0;
    return 1;
}
void df(int x)
{
    int y;
    s[++s[0]]=x;
    while(s[0])
    {
        x=s[s[0]];
        if(v[x].size())
        {
            y=v[x].back();
            v[x].pop_back();
            s[++s[0]]=y;
            v[y].erase(find(v[y].begin(), v[y].end(), x));
        }
        else
        {
        s[0]--;
        sol.push_back(x);
        }
    }
}