Cod sursa(job #1132994)

Utilizator jonneJonne Jonnela jonne Data 4 martie 2014 11:13:38
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <list>
#include <vector>
#include <map>
#include <set>

using namespace std;

map<int, multiset<int> > verkko;

int n, m;
int c;

void tulosta(int x) {
    if (c == 0) cout << x;
    else if (c < m) cout << " " << x;
    c++;
}

void tee_kierros(int alku) {
    vector<int> kierros;
    int solmu = alku;
    do {
        int uusi = *(verkko[solmu].begin());
        verkko[solmu].erase(uusi);
        auto x = verkko[uusi].find(solmu);
        if (x != verkko[uusi].end())
            verkko[uusi].erase(x);
        solmu = uusi;
        kierros.push_back(solmu);
    } while (solmu != alku);
    for (int &solmu : kierros) {
        tulosta(solmu);
        if (verkko[solmu].size() > 0) {
            tee_kierros(solmu);
        }
    }
}

void euler(int alku) {
    tulosta(alku);
    tee_kierros(alku);
    cout << endl;
}

void lisaa_kaari(int a, int b) {
    verkko[a].insert(b);
    verkko[b].insert(a);
}

void muodosta_verkko() {
    cin >> n >> m;
    for (int i = 0; i < m; i++) {
        int a, b;
        cin >> a >> b;
        lisaa_kaari(a, b);
    }
}

int main() {
    muodosta_verkko();
    euler(1);
}