Cod sursa(job #2082726)

Utilizator mateibanuBanu Matei Costin mateibanu Data 6 decembrie 2017 18:52:52
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<stdio.h>
#include<list>
#include<stack>

using namespace std;

stack<int>s;
list<pair<int,int> >l[100010];
int b[500010],n,m;

void read(){
    int i,x,y;
    scanf("%d%d",&n,&m);
    for (i=1;i<=m;i++){
        scanf("%d%d",&x,&y);
        l[x].push_back(make_pair(y,i));
        l[y].push_back(make_pair(x,i));
    }
}

int checkeu(){
    int i;
    for (i=1;i<=n;i++)
        if (l[i].size()%2) {return 0;}
    return 1;
}

void euler(){
    int i,j,k;
    s.push(1);
    while (!s.empty()){
        i=s.top();
        if (!l[i].empty()){
            j=l[i].back().first;
            k=l[i].back().second;
            l[i].pop_back();
            if (!b[k]){
                b[k]=1;
                s.push(j);
            }
        }
        else{
        s.pop();
        printf("%d ",i);
        }
    }
}

int main()
{
    freopen("ciclueuler.in", "r", stdin);
    freopen("ciclueuler.out", "w", stdout);

    read();
    if (checkeu()) euler();
    else printf("-1");
    return 0;
}