Cod sursa(job #1334257)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 4 februarie 2015 09:41:51
Problema Ciclu Eulerian Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
#define NMAX 100010

using namespace std;

int n, m, sterse;
vector<int> v[NMAX], sol;
stack<int> st;

void citire()
{
    scanf("%d %d", &n, &m);
    int t1, t2;
    for (int i = 1; i <= m; i++)
    {
        scanf("%d %d", &t1, &t2);
        v[t1].push_back(t2);
        v[t2].push_back(t1);
    }
}

void euler()
{
    st.push(1);
    while (!st.empty())
    {
        int top = st.top();

        if (v[top].size() == 0)
        {
            sol.push_back(top);
            st.pop();
            continue;
        }
        int next = v[top][0];
        v[top].erase(v[top].begin());
        sterse++;
        for (int i = 0; i < v[next].size(); i++)
            if (v[next][i] == top)
            {
                v[next].erase(v[next].begin()+i);
                break;
            }
        st.push(next);
    }
    if (sterse != m)
        return ;
    for (int i = sol.size()-1; i > 0; i--)
        printf("%d ", sol[i]);
}

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

    citire();
    euler();

    return 0;
}