Cod sursa(job #2468698)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 5 octombrie 2019 20:01:23
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <vector>

const int MAXN = 100000 + 5;

using namespace std;

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

vector<int>graf[MAXN];
vector<pair<int,int> >solutie;
bool viz[MAXN];
int n,m;
bool eulerian = false;

void afis(){
    for(auto muchie : solutie)
        out<<muchie.first<<" "<<muchie.second<<" ";
}

void dfs(int nod){
    if(eulerian)
        return;
    if(solutie.size() == n - 1){
        afis();
        eulerian = true;
        return;
    }
    int curent;
    for(int i = 0; i < graf[nod].size(); i++){
        curent = graf[nod][i];
        if(!viz[curent]){
            viz[curent] = true;
            solutie.push_back({nod,curent});
            dfs(curent);
            viz[curent] = false;
            solutie.pop_back();
        }

    }
}


int main()
{
    in>>n>>m;
    for(int i = 1; i <= m; i++){
        int x,y;
        in>>x>>y;
        graf[x].push_back(y);
    }
    dfs(1);
    if(!eulerian)
        out<<-1;
    return 0;
}