Cod sursa(job #729781)

Utilizator sana1987Laurentiu Dascalu sana1987 Data 30 martie 2012 01:34:58
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <vector>
#include <queue>
#include <cstdio>
#include <algorithm>
#define N 100001

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

void euler(int v) {
    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);
        euler(w);
    }
    euler_cycle.push_back(v);
}

int main() {
    freopen("ciclueuler.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(); (i + 1) != euler_cycle.end(); i++) {
        printf("%d ", *i + 1);
    }
    printf("\n");

    return 0;
}