Cod sursa(job #2082718)

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

using namespace std;

FILE*f=fopen("ciclueuler.in","r");
FILE*g=fopen("ciclueuler.out","w");

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

void read(){
    int i,x,y;
    fscanf(f,"%d%d",&n,&m);
    for (i=1;i<=m;i++){
        fscanf(f,"%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();
        fprintf(g,"%d ",i);
        }
    }
}

int main()
{
    read();
    if (checkeu()) euler();
    else fprintf(g,"-1");
    fclose(f);
    fclose(g);
    return 0;
}