Cod sursa(job #1552278)

Utilizator Sanduleac_VladSanduleac Vllad Alexandru Sanduleac_Vlad Data 17 decembrie 2015 17:23:52
Problema Ciclu Eulerian Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#include <vector>
using namespace std;

int N, M;
vector<int> con[100001];
int x, y;

void do_the_thing(int nod) {
    vector<int> rez;
    int i, u, uprev;
    bool k = true;
    u = nod;
    while(u != nod || k) {
        k = false;
        rez.push_back(u);
        uprev = u;
        u = con[u].back();
        con[uprev].pop_back();
        con[u].erase(find(con[u].begin(), con[u].end(), uprev));
    }
    for(i = 0; i < rez.size(); i++) {
        while(con[rez[i]].size() > 0)
            do_the_thing(rez[i]);
        printf("%d ", rez[i]);
    }
}

int main() {
    int i, j;
    freopen("ciclueuler.in", "r", stdin);
    freopen("ciclueuler.out", "w", stdout);
    scanf("%d %d", &N, &M);
    for(i = 0; i < M; i++) {
        scanf("%d %d", &x, &y);
        con[x].push_back(y);
        con[y].push_back(x);
    }
    do_the_thing(1);
    return 0;
}