Pagini recente » Cod sursa (job #2203898) | Cod sursa (job #3258237) | Cod sursa (job #2292806) | Cod sursa (job #1646451) | Cod sursa (job #2663178)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int n, m, vf[1000002], urm[1000002], last[100001], pozb = 1, grad[100001];
bitset <500001> viz;
void adauga(int from, int to)
{
vf[++pozb] = to;
urm[pozb] = last[from];
last[from] = pozb;
}
int stiva[500002], pozs, lista[500002], pozl;
void dfsIter()
{
stiva[++pozs] = 1;
while(pozs)
{
int nod = stiva[pozs];
bool ok = 0;
for(; last[nod]; last[nod] = urm[last[nod]])
if(viz[last[nod]/2] == 0)
{
viz[last[nod]/2] = 1;
stiva[++pozs] = vf[last[nod]];
ok = 1;
break;
}
if(ok == 0)
{
lista[++pozl] = nod;
pozs--;
}
}
}
int main()
{
in >> n >> m;
for(int i, j, k = 1; k <= m; k++)
{
in >> i >> j;
adauga(i, j);
adauga(j, i);
grad[i]++;
grad[j]++;
}
for(int i = 1; i <= n; i++)
if(grad[i] % 2)
{
out << -1;
return 0;
}
dfsIter();
for(int i = 1; i < pozl; i++)
out << lista[i] << ' ';
return 0;
}