Cod sursa(job #1436928)

Utilizator bogdanciurezubogdan ciurezu bogdanciurezu Data 16 mai 2015 16:59:54
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <vector>
#include <stack>
#define nmax 500100

using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

int N, M;
bool folosit[nmax];
vector <pair <int, int> > muchi;
vector <int> graf[nmax], Sol;

void euler(int nod){
int i;
        for(i = 0; i < graf[nod].size(); ++i){
            if(! folosit[ graf[nod][i] ]){
                int nod2 = muchi[ graf[nod][i] ].first + muchi[ graf[nod][i] ].second - nod;

                folosit[ graf[nod][i] ] = true;
                euler(nod2);
            }
        }
    Sol.push_back(nod);
}

int main()
{int a, b;
    f>>N>>M;
    muchi.push_back( make_pair(0, 0) );
    for(int i = 1; i <= M; ++i){
        f>>a>>b;
        muchi.push_back( make_pair(a, b) );
        graf[a].push_back(i);

        if(a != b)
            graf[b].push_back(i);
    }

    /*for(int i = 1; i <= N; ++i){
        for(int j = 0; j < graf[i].size(); ++j){
            g<<muchi[ graf[i][j] ].first<<' '<<muchi[ graf[i][j] ].second<<' ';
        }
        g<<'\n';
    }*/
    euler(1);

    for(int i = Sol.size() - 1; i > 0; --i)
        g << Sol[i] <<' ';
        g<<'\n';

    return 0;
}