Cod sursa(job #2657007)

Utilizator felix24mihaiPrava Felix Mihai felix24mihai Data 9 octombrie 2020 14:38:49
Problema Ciclu Eulerian Scor 60
Compilator cpp-32 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 100001
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

int n, m;
vector <int> nodes[NMAX];
vector <int> result;
void read(){
    f >> n >> m;
    int x, y;
    for (int i = 1; i <= m; i++){
        f >> x >> y;
        nodes[x].push_back(y);
        if (x != y)
            nodes[y].push_back(x);
    }
}
void euler(int node){
    int i = 0;
    while (i < nodes[node].size()){
        int next = nodes[node][i];
        nodes[node].erase(nodes[node].begin() + i);
        i--;
        if (next != node){
            int index = 0;
            bool find = false;
            while (index < nodes[next].size() && find == false){
                if (nodes[next][index] == node){
                    find = true;
                    nodes[next].erase(nodes[next].begin() + index);
                }
                index++;
            }
        }
        i++;
        euler(next);
    }
    result.push_back(node);
}
int main()
{
    read();
    euler(1);
    for (int i = result.size() - 1; i > 0; i--)
        g << result[i] << " ";
    return 0;
}