Cod sursa(job #2527379)

Utilizator PetrescuAlexandru Petrescu Petrescu Data 20 ianuarie 2020 11:09:06
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <vector>
#include <utility>
#define MAX 100000

using namespace std;

vector< pair<int, int> >graf[MAX + 1];
vector<int> listNodes;
bool vizitat[5 * MAX + 1];
int edgeCounter = 0, edgeNr = 0;

void DFS(int nod)
{
    listNodes.push_back(nod);

    for(auto i : graf[nod])
    {
        if(!vizitat[i.second] && (i.first != 1 || edgeNr == edgeCounter - 1))
        {
            vizitat[i.second] = 1;
            edgeNr++;

            DFS(i.first);
        }
    }
}

int main()
{
    int n, m, i, j, a, b;

    ifstream fin("ciclueulerian.in");
    ofstream fout("ciclueulerian.out");

    fin >> n >> m;

    for(i = 0; i < m; i++)
    {
        fin >> a >> b;

        graf[a].push_back({b, edgeCounter});
        graf[b].push_back({a, edgeCounter});

        edgeCounter++;
    }

    DFS(1);

    listNodes.pop_back();
    if(edgeNr == edgeCounter)for(auto i : listNodes)fout << i << " ";
    else fout << -1;

    fin.close();
    fout.close();

    return 0;
}