Cod sursa(job #481638)

Utilizator gabipurcaruGabi Purcaru gabipurcaru Data 1 septembrie 2010 10:30:07
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <vector>

#define MAXN 100010
#define MAXM 500010
using namespace std;

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

vector<int> g[MAXN], result;
int n,m,i,a,b;

void euler(int nod)
{
    int w;
    while(g[nod].size())
    {
        do
        {
            w = g[nod].back();
            g[nod].pop_back();
        }
        while(w == -1 && g[nod].size());

        if(!g[nod].size() && w == -1)
        {
            result.push_back(nod);
            return;
        }

        for(vector<int>::iterator it=g[w].begin(); it!=g[w].end(); ++it)
            if(*it == nod)
            {
                 *it = -1;
                 break;
            }
        euler(w);
    }
    result.push_back(nod);

}

int main()
{
    in>>n>>m;
    for(i=1; i<=m; i++)
    {
        in>>a>>b;
        g[a].push_back(b);
        g[b].push_back(a);
    }

    euler(1);

    for(i=0; i<result.size()-1; ++i)
    {
        out<<result[i]<<' ';
    }

    return 0;
}