Cod sursa(job #2107631)

Utilizator eduardandrei20Nechifor Eduard Andrei eduardandrei20 Data 17 ianuarie 2018 16:34:46
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int n ,m;
vector<int>af;
struct nod{
int info;
nod *next;}*L[1000001];
void add(int x , int y)
{
    nod *aux= new nod;
    aux ->info = y;
    aux->next = L[x];
    L[x]=aux;
}

void sterg(int k , int i)
{
    nod *p,*q;
    if(L[k]->info==i)
    {
        p=L[k];
        L[k]=L[k]->next;
        delete p;
        return ;
    }
    for(p=L[k];p->info!=i;p=p->next)
        q=p;
    q->next=p->next;
    delete p;

}


void euler(int node)
{
    while(L[node])
    {
        int w = L[node]->info;
      sterg(node,w);
        sterg(w,node);
        euler(w);
    }
    af.push_back(node);
}

int main()
{
    in >> n >> m ;
    for(int i =1; i<=m ;++i)
    {
        int x, y;
        in>>x>>y;
        add(x,y);
        add(y,x);
    }
euler(1);
for (int i = 0 ; i<af.size()-1;++i)
    out<<af[i]<<" ";
    return 0;

}

//euler (nod v)
  //  cat timp (v are vecini)
    //    w = un vecin aleator al lui v
      //  sterge_muchie (v, w)
        //euler (w)
    //sfarsit cat timp
    //adauga v la ciclu