Cod sursa(job #1337159)

Utilizator retrogradLucian Bicsi retrograd Data 8 februarie 2015 17:46:33
Problema Ciclu Eulerian Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<fstream>
#include<vector>
#include<list>
#include<stack>

using namespace std;
typedef int var;

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

struct Edge {
    var n, ind;
    Edge(var a, var b) : n(a), ind(b) {}
};

const var MAXN = 100001;

vector<bool> TAKEN;
vector<Edge> G[MAXN];
var n, m;

void euler(var node) {
    fout<<node<<" ";
    while(!G[node].empty()) {
        Edge &e = G[node].back();
        G[node].pop_back();

        if(TAKEN[e.ind]) {
            continue;
        }

        TAKEN[e.ind] = 1;

        euler(e.n);
    }
}

int main() {
    var a, b;
    fin>>n>>m;
    TAKEN.resize(m, 0);
    for(var i=1; i<=m; i++) {
        fin>>a>>b;
        G[a].push_back(Edge(b, i));
        G[b].push_back(Edge(a, i));
    }

    while(!G[1].empty()) {
        Edge &e = G[1].back();
        TAKEN[e.ind] = 1;
        G[1].pop_back();

        euler(e.n);
    }
    return 0;
}