Cod sursa(job #2376935)

Utilizator gazdac_alex@yahoo.comGazdac Alexandru Eugen [email protected] Data 8 martie 2019 19:05:48
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int const maxim=100010;
vector <pair<int,int>> muchii[maxim];
vector <bool> vizitat;
vector <int> coada;
vector <int> raspuns;
int n,m;

void citire(){
in >> n >> m;
int a,b;
for(int i=1;i<=m;i++){
    in >> a >> b;
    muchii[a].push_back(make_pair(b,i));
    muchii[b].push_back(make_pair(a,i));
    vizitat.push_back(false);
    }
}

void euler(int nodstart){
coada.push_back(nodstart);
while(!coada.empty()){
    int nod=coada.back();
    if(!muchii[nod].empty()){
        int vecin=muchii[nod].back().first;
        int numar=muchii[nod].back().second;
        muchii[nod].pop_back();
        if(vizitat[numar-1]==false){
            vizitat[numar-1]=true;
            coada.push_back(vecin);
        }
            }
    else{
        coada.pop_back();
        raspuns.push_back(nod);
    }
  }
}

void afisare(){
for(size_t i=0;i<raspuns.size()-1;i++)out << raspuns[i] << " ";}


int main(){
citire();
for(int i=1;i<=n;i++){
    if(muchii[i].size() & 1){
        out << "-1";
        return 0;
    }
}
euler(1);
afisare();
return 0;}