Cod sursa(job #1792207)

Utilizator zdavid112zIon David-Gabriel zdavid112z Data 30 octombrie 2016 10:50:45
Problema Ciclu Eulerian Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <cstdio>
#include <vector>

using namespace std;

struct Muchie
{
    int a, b;
    bool activ;
    int other(int c)
    {
        return (a == c) ? b : a;
    }
} m[500000];

vector<int> v[100000];
int n, lm, r[100000];

bool parc(int n, int gr)
{
    r[gr] = n;
    if(gr == lm - 1)
        return true;
    for(int i = 0; i < v[n].size(); i++)
    {
        if(m[v[n][i]].activ == false)
            continue;
        m[v[n][i]].activ = false;
        if(parc(m[v[n][i]].other(n), gr + 1))
            return true;
        m[v[n][i]].activ = true;
    }
    return false;
}

int main()
{
    freopen("ciclueuler.in", "r", stdin);
    freopen("ciclueuler.out", "w", stdout);
    scanf("%d%d", &n, &lm);
    for(int i = 0; i < lm; i++)
    {
        scanf("%d%d", &m[i].a, &m[i].b);
        m[i].a--; m[i].b--;
        m[i].activ = true;
        v[m[i].a].push_back(i);
        v[m[i].b].push_back(i);
    }
    for(int i = 0; i < n; i++)
    {
        if(v[i].size() == 0)
        {
            printf("-1");
            return 0;
        }
    }
    if(!parc(0, 0))
        printf("-1");
    else
    {
        for(int i = 0; i < lm; i++)
            printf("%d ", r[i] + 1);
    }
    return 0;
}