Cod sursa(job #1799004)

Utilizator lauratalaatlaura talaat lauratalaat Data 5 noiembrie 2016 17:33:38
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int n,m,k;
vector<int>v[100001];
vector<int>::iterator it;
int stiva[500001],vc[100001];
void citire(){
    int i,x,y;
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++){
        scanf("%d%d",&x,&y);
        v[x].push_back(y);
        v[y].push_back(x);
        vc[x]++;
        vc[y]++;
    }
}
void euler ( int nod ){
    int fiu;
    while(v[nod].size()!=0){
        fiu=v[nod].back();
        k++;
        stiva[k]=fiu;
        v[nod].pop_back();
        it=find(v[fiu].begin(),v[fiu].end(),nod);
        v[fiu].erase(it);
        nod=fiu;
    }
}
int main(){
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    citire();
    int pp=1,i;
    for(i=1;i<=n&&pp==1;i++)
        if(vc[i]%2==1)
            pp=0;
    if(pp==0)
        printf("-1\n");
    else{
        stiva[1]=1;
        k=1;
        printf("%d ",stiva[k]);
        while(k!=0){
            euler(stiva[k]);
            k--;
            if(k>1)
                printf("%d ",stiva[k]);
        }
    }
    return 0;
}