Cod sursa(job #729784)

Utilizator sana1987Laurentiu Dascalu sana1987 Data 30 martie 2012 03:46:23
Problema Ciclu Eulerian Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <vector>
#include <queue>
#include <cstdio>
#include <algorithm>
#include <stack>
#define N 100001

using namespace std;
vector<int> graph[N];
vector<int> euler_cycle;
int n;

void euler(int v) {
    stack<int> s;
    s.push(v);
    while (!s.empty()) {
        v = s.top();
        s.pop();
        while (graph[v].size() > 0) {
            int w = graph[v].back();
            graph[v].pop_back();
            vector<int>::iterator it = find(graph[w].begin(), graph[w].end(), v);
            graph[w].erase(it);
            s.push(w);
            v = w;
        }
        euler_cycle.push_back(v);
    }
}

int main() {
    freopen("ciclueuler.in", "r", stdin);
    //freopen("grader_test10.in", "r", stdin);
    freopen("ciclueuler.out", "w", stdout);

    int m;
    scanf("%d %d", &n, &m);

    for (int i = 0; i < m; i++) {
        int x, y;
        scanf("%d %d ", &x, &y);
        graph[x - 1].push_back(y - 1);
        graph[y - 1].push_back(x - 1);
    }

    euler(0);

    for (vector<int>::iterator i = euler_cycle.begin() + 1; i != euler_cycle.end(); i++) {
        printf("%d ", *i + 1);
    }

    return 0;
}