Cod sursa(job #2865745)

Utilizator MihaiZ777MihaiZ MihaiZ777 Data 9 martie 2022 10:13:37
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

struct Edge
{
    int node;
    int id;
};

int n, m;
vector <Edge> graph[100005];
bool visitedEdges[500005];
vector <int> ans;

int NextEdge(int node)
{
    while (!graph[node].empty() && visitedEdges[graph[node].back().id])
    {
        graph[node].pop_back();
    }

    if (graph[node].empty())
    {
        return 0;
    }

    visitedEdges[graph[node].back().id] = true;
    int nextEdge = graph[node].back().node;
    graph[node].pop_back();
    return nextEdge;
}

void Euler(int node)
{
    while (int nextEdge = NextEdge(node))
    {
        Euler(nextEdge);
    }
    ans.push_back(node);
}

int main()
{
    fin >> n >> m;
    for (int i = 0; i < m; i++)
    {
        int a, b;
        fin >> a >> b;
        Edge newEdge = {b, i};
        graph[a].push_back(newEdge);
        newEdge = {a, i};
        graph[b].push_back(newEdge);
    }
    Euler(1);
    for (int i = 0; i < ans.size() - 1; i++)
    {
        fout << ans[i] << ' ';
    }
    fout << '\n';
}