Cod sursa(job #1514797)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 31 octombrie 2015 16:45:03
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<stdio.h>
#include<vector>
#include<algorithm>

using namespace std;

FILE *fin,*fout;
int n,m,x,y;
vector<int> nb[100001];
int sol[500001],p,val;
bool f;

void solve(int nod)
{
    while(nb[nod].size()>0)
    {
        val=nb[nod].back();
        nb[nod].pop_back();
        nb[val].erase(find(nb[val].begin(),nb[val].end(),nod));
        solve(val);
    }
    p++;
    sol[p]=nod;
}

int main()
{
    fin=fopen("ciclueuler.in","r");
    fout=fopen("ciclueuler.out","w");

    fscanf(fin,"%d %d",&n,&m);

    for(int i=1;i<=m;i++)
    {
        fscanf(fin,"%d %d",&x,&y);
        {
            nb[x].push_back(y);
            nb[y].push_back(x);
        }
    }

    for(int i=1;i<=n;i++)
    {
        if(nb[i].size()%2==1)
        {
            f=1;
            break;
        }
    }

    if(f==1)
    {
        fprintf(fout,"-1");
    }
    else
    {
        solve(1);
        for(int i=1;i<p;i++)
        {
            fprintf(fout,"%d ",sol[i]);
        }
    }
}