Cod sursa(job #1629071)

Utilizator andreismara97Smarandoiu Andrei andreismara97 Data 4 martie 2016 12:34:31
Problema Ciclu Eulerian Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include<fstream>
#include<vector>
using namespace std;

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

const int Nmax = 100001;
vector <int> lista[Nmax], coada;
int n,m=0, k=0;
bool ok=true;

void citire()
{
    int x,y;
    in>>n>>y;
    while(in>>x>>y)
    {
        lista[x].push_back(y);
        lista[y].push_back(x);
        m++;
    }
    coada.push_back(1);
//    out<<m+1<<'\n';
}

void sterge(int baza, int nod, int i)
{
    lista[baza].erase(lista[baza].begin()+i);
    for(int j=0; j<lista[nod].size(); j++)
        if(lista[nod][j] == baza)
        {
            lista[nod].erase(lista[nod].begin()+j);
            break;
        }
}

void adauga(int baza, int nod)
{
    lista[baza].push_back(nod);
    lista[nod].push_back(baza);
}

void DFS(int baza)
{

    if(baza == 1 && k==m)
    {
        ok=false;
        for(int i=0; i<coada.size()-1; i++)
            out<<coada[i]<<' ';
    }
    if(ok==true)
    for(int i=0; i<lista[baza].size(); i++)
    {
        int nod=lista[baza][i];
        sterge(baza, nod, i);
        k++;
        coada.push_back(nod);
        DFS(nod);
        coada.pop_back();
        adauga(baza, nod);
        k--;
    }

}

int main ()
{

    citire();
    DFS(1);
    return 0;
}