Pagini recente » Cod sursa (job #3222544) | Cod sursa (job #2078842) | Cod sursa (job #3269529) | Cod sursa (job #1884040) | Cod sursa (job #3186706)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 500005;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int src[NMAX], dest[NMAX];
unsigned int poz[NMAX]; // poz[i] - pozitia unde am ramas in lista de adiacenta L[i]
int N, M;
bool viz[NMAX];
vector<int> G[NMAX], q;
void Citire()
{
fin >> N >> M;
for (int i = 1; i <= M; i++)
{
fin >> src[i] >> dest[i];
G[src[i]].push_back(i);
G[dest[i]].push_back(i);
}
}
bool Conditie_grad_par()
{
for (int i = 1; i <= N; i++)
if (G[i].size() % 2 == 1)
return false;
return true;
}
void DFS(int nod)
{
while (poz[nod] < G[nod].size())
{
int k = G[nod][poz[nod]++];
if (!viz[k])
{
viz[k] = true;
DFS(src[k] + dest[k] - nod);
}
}
q.push_back(nod);
}
void Ciclu_Eulerian()
{
if (!Conditie_grad_par()) {
fout << "-1" << endl;
}
else {
DFS(1);
for (auto nod : q)
fout << nod << " ";
fout << endl;
}
}
int main()
{
Citire();
Ciclu_Eulerian();
fin.close();
fout.close();
return 0;
}