Cod sursa(job #1514799)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 31 octombrie 2015 16:50:15
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 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,nod;
bool f;

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
    {
        for(int i=1;i<=n;i++)
        {
            nod=i;
            while(nb[nod].size()>0)
            {
                p++;
                sol[p]=nod;
                val=nb[nod].back();
                nb[nod].pop_back();
                nb[val].erase(find(nb[val].begin(),nb[val].end(),nod));
                nod=val;
            }
        }
        for(int i=1;i<p;i++)
        {
            fprintf(fout,"%d ",sol[i]);
        }
    }
}