Cod sursa(job #1679246)

Utilizator horatiudumhoratiu horatiudum Data 7 aprilie 2016 19:39:30
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <iostream>

#define MAX 100002
using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int N, M;
vector<int> graf[MAX], Stack;
void citire() {
    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);
    }
}
void euler() {
    Stack.push_back(1);

    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();
        }
    }
}
void solve(){
    for(int i=1;i<=N;i++)
    {
        if(graf[i].size() & 1)
        {
            fout<<-1;
            return;
        }
    }

    euler();
}
int main()
{
    citire();
    /*cout<<endl<<"matrice"<<endl;

    for(int i=1;i<=N;i++) {
    vector<int> graf1=graf[i];
    for (vector<int>::iterator it = graf1.begin() ; it != graf1.end(); ++it) {
           cout<< *it<<" ";
        }
        cout<<endl;
    }
    cout<<endl;*/
    solve();
    return 0;
}