Cod sursa(job #3204839)

Utilizator vozian.anghelinaAnghelina Vozian vozian.anghelina Data 17 februarie 2024 18:39:31
Problema Ciclu Eulerian Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> N[100100];
int A[100100], R[100100], rs;
bool exista;
void parc(int nod){
    rs++;
    R[rs] = nod;
    for(int i=0; i<N[nod].size(); i++){
        int pana = N[nod][i];
        if(pana && A[pana]-1){
            m--;
            A[nod]--;
            A[pana]--;
            int u = N[nod][i];
            N[nod][i] = 0;
            int j = 0;
            while(N[u][j] != nod){
                j++;
            }
            N[u][j] = 0;
            parc(u);
        } else if(pana == R[1]&& A[pana] == 1 && m == 1){
            exista = 1;
        }
    }
    return;
}

int main(){
    ifstream cin("ciclueuler.in");
    ofstream cout("ciclueuler.out");
    cin >> n >> m;

    int d, p;
    for(int i=1; i<=m; i++){
        cin >> d >> p;
        N[d].push_back(p);
        N[p].push_back(d);
        A[d]++;
        A[p]++;
    }  

    parc(1);
    if(exista){
        for(int i=1; i<=rs; i++){
            cout << R[i] << ' ';
        }
    } else {
        cout << -1 << endl;
    }
}