Cod sursa(job #2202933)

Utilizator EclipseTepes Alexandru Eclipse Data 10 mai 2018 14:32:24
Problema Ciclu Eulerian Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <string.h>
#define dMAX 100000

using namespace std;

int n, m, x, y, poz, nr, newV, u;
vector<pair<int, int> > graf[dMAX + 2];
bool viz[dMAX * 5 + 2], vv;
int d[dMAX + 2], l, s[dMAX + 2];

char sir[30];
int idx;

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

void GetInt(int &t) {
    t = 0;
    while (isdigit(sir[idx])) {
        t *= 10;
        t += (int)sir[idx] - '0';
        idx++;
    }
    idx++;
}

void Euler(int v) {
    for (u = 0; u < s[v]; u++) {
        newV = graf[v][u].first;
        vv = viz[graf[v][u].second];
        if (!vv) {
            viz[graf[v][u].second] = true;
            Euler(newV);
        }
    }
    nr++;
    if (nr <= m)
        fout << v << ' ';
}

int main()
{
    int i, j;
    fin >> n >> m;
    fin.get();
    for (i = 1; i <= m; i++) {
        idx = 0;
        fin.getline(sir, 15);
        GetInt(x);
        GetInt(y);
        l++;
        graf[x].push_back({y, l});
        graf[y].push_back({x, l});
        d[x]++, d[y]++;
    }
    for (i = 1; i <= n; i++) {
        if (d[i] % 2) {
            fout << -1;
            return 0;
        }
        s[i] = graf[i].size();
    }
    Euler(1);

    return 0;
}