Cod sursa(job #2443036)

Utilizator Leonard123Mirt Leonard Leonard123 Data 26 iulie 2019 12:03:09
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include<fstream>
#include<vector>
using namespace std;
#define maxn 100005
#define maxm 500005
int n,m,g[maxn],stiva[maxm],rez[maxm] , prim=1, ultim=1,k=1;
vector <int>v[maxn];
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");

void read(){
    int x,y;
    for(int i=1; i<=m; i++){
        cin>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
        g[x]++; g[y]++;
    }
}

void euler(){
    while(prim<=ultim&&prim>0){
        while(g[stiva[prim]]){
            stiva[++ultim]=v[stiva[prim]][g[stiva[prim]]-1];
            g[stiva[prim]]--;
                for(int i=0; i<g[stiva[ultim]]; i++){
                if(v[stiva[ultim]][i]==stiva[prim]){
                    v[stiva[ultim]].erase (v[stiva[ultim]].begin()+i);
                    g[stiva[ultim]]--;
                    break;
                }
            }
            prim++;
        }
        rez[k++]=stiva[prim];
        prim--;
        ultim--;
    }
}


int main(){
    cin>>n>>m;
    read();
    stiva[1]=1;
    euler();
    k-=2;
    if(k!=m)
       cout<<-1;
    else
    for(int i=1; i<=k; i++)
        cout<<rez[i]<<' ';
    return 0;
}