Cod sursa(job #2092207)

Utilizator catalina200029Olteanu Catalina catalina200029 Data 21 decembrie 2017 12:24:57
Problema Ciclu Eulerian Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

struct nod {
    int inf,ok=0;
    nod *urm;
}*l[100005];
int n,m,a[500005],ok,nr;

void adaug(nod *&p,int x) {
    nod *c;
    c=new nod;
    c->inf=x;
    c->urm=p;
    p=c;
}

void caut(nod *&p,int x,int k) {
    nod *c;
    for (c=p;c;c=c->urm)
        if (c->inf==x && c->ok==0) {
            c->ok=k;
            break;
        }
}

void euler(int i) {
    nod *j;
    for (j=l[i];j;j=j->urm)
        if (j->ok==0){
            ok++;
            j->ok=1;
            caut(l[j->inf],i,1);
            euler(j->inf);
        }
    a[++nr]=i;
}

void afis() {
    int i;
    for (i=1;i<nr;i++)
        g<<a[i]<<' ';
}

int main() {
    int i,x,y;
    nod *c;
    f>>n>>m;
    for (i=1;i<=m;i++) {
        f>>x>>y;
        if (x==y) adaug(l[x],y);
        else {
            adaug(l[x],y);
            adaug(l[y],x);
        }
    }
    euler(1);
    ok=0;
    if (a[1]==a[nr]) ok=1;
    if (ok) afis();
    else g<<"-1";
    return 0;
}