Cod sursa(job #2527400)

Utilizator PetrescuAlexandru Petrescu Petrescu Data 20 ianuarie 2020 11:46:32
Problema Ciclu Eulerian Scor 60
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)
{


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

            DFS(i.first);
        }
    }
    listNodes.push_back(nod);
}

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

    ifstream fin("ciclueuler.in");
    ofstream fout("ciclueuler.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;
}