Cod sursa(job #2815804)

Utilizator oporanu.alexAlex Oporanu oporanu.alex Data 10 decembrie 2021 13:22:06
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int nmax = 100005;
vector<int> cycle;
vector<int> adj[nmax];
void euler(int vertex){
    while(adj[vertex].empty() == false)
    {
        int ngb = adj[vertex].back();
        adj[vertex].pop_back();
        int idx = -1;
        for(int i = 0; i < adj[ngb].size(); ++i)
            if(adj[ngb][i] == vertex)
                {idx = i; break;}
            if(idx + 1){
                adj[ngb].erase(adj[ngb].begin() + idx);
            }
        euler(ngb);
    }
    cycle.push_back(vertex);
}
int main()
{
    int V, E;
    fin >> V >> E;
    for(int i = 1; i <= E; ++i){
        int src, dst;
        fin >> src >> dst;
        adj[src].push_back(dst);
        adj[dst].push_back(src);
    }

    euler(1);
    cycle.pop_back();
    for(auto el: cycle){
        fout << el << ' ';
    }
    return 0;
}