Cod sursa(job #1329994)

Utilizator NacuCristianCristian Nacu NacuCristian Data 30 ianuarie 2015 10:35:43
Problema Ciclu Eulerian Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <vector>
#include <stack>


using namespace std;

vector <int>g[100010];
vector <int>sol;
stack <int>v;

int n,m,m_v;

void citire()
{
    freopen("ciclueuler.in","r",stdin);
    scanf("%d %d",&n,&m);
    int a,b;
    for(int i=0; i<m; i++)
    {
        scanf("%d %d",&a,&b);
        g[a].push_back(b);
        g[b].push_back(a);
    }
}

int ok=0;
int k;


void stergere(int k, int l)
{
    for(int i=0; i<g[k].size(); i++)
        if(g[k][i]==l)
            g[k].erase(g[k].begin()+i);
}

void c_euler()
{
    int x,k;
    v.push(1);
    while(!v.empty())
    {
        x=v.top();
        if(!g[x].empty())
        {
            k=g[x][0];
            v.push(g[x][0]);
            stergere(g[x][0],x);
            g[x].erase(g[x].begin());
            m_v++;
            continue;
        }
        sol.push_back(x);
        v.pop();
}

}

void afisare()
{
    freopen("ciclueuler.out","w",stdout);
    for(int i=0;i<sol.size();i++)
        printf("%d ",sol[i]);
}

int main()
{
    citire();
    c_euler();
    afisare();
    return 0;
}