Cod sursa(job #1689699)

Utilizator horatiudumhoratiu horatiudum Data 14 aprilie 2016 15:02:27
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include <fstream>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <iostream>

#define MAX 100010
using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int N, M;
vector<int> graf[MAX], Stack;

void ciclueuler(int nodPornire) {
    Stack.push_back(nodPornire);

    while(Stack.size()) {
        int nod=Stack.back();
        if(graf[nod].size()) {
            int fiu=graf[nod].back();
            graf[nod].pop_back();
            graf[fiu].erase(find(graf[fiu].begin(), graf[fiu].end(), nod));
            Stack.push_back(fiu);
        } else {
            fout<<nod<<" ";
            Stack.pop_back();
        }
    }
}

int main(){
    int a, b;
    fin>>N>>M;

    for(int i=1;i<=M;i++) {
        fin>>a>>b;
        graf[a].push_back(b);
        graf[b].push_back(a);
    }

                //
                /*
                for(int i=1;i<=N;i++) {
                    vector<int> graf1=graf[i];
                    cout<< "nod "<< i << " cu copii: ";
                    for (vector<int>::iterator it = graf1.begin() ; it != graf1.end(); ++it) {
                           cout<< *it<<" ";
                        }
                        cout<<"\n";
                }
                cout<<"\n";
                cout<<"\n";*/
                //

    int sizeGraf=0;
    for(int i=1;i<=N;i++) {
        sizeGraf=graf[i].size();
        //if(sizeGraf & 1)
        if(sizeGraf%2!=0) {
            fout<<-1;
            return 0;
        }
    }
    int nodPornire=1;
    ciclueuler(nodPornire);
    return 0;
}