Pagini recente » Cod sursa (job #362129) | Cod sursa (job #546695) | Cod sursa (job #606344) | Cod sursa (job #2093261) | Cod sursa (job #2735079)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int N = 100001, M = 500001;
vector <int> a[N], sol;
int grad[N], c = 1;
struct muchie{
int x, y;
bool anulat;
}e[M];
void adauga(int x, int y)
{
a[x].push_back(c);
a[y].push_back(c);
e[c] = {x, y, false};
c++;
}
void euler(int x)
{
for(int j = a[x].size()-1; j >= 0; j--)
{
int i = a[x][j];
a[x].pop_back();
if(e[i].anulat)
continue;
int y = e[i].x + e[i].y - x;
e[i].anulat = true;
euler(y);
}
sol.push_back(x);
}
int main()
{
int n, m, x, y;
in >> n >> m;
for(int i = 1; i <= m; i++)
{
in >> x >> y;
adauga(x, y);
grad[x]++;
grad[y]++;
}
for(int i = 1; i <= n; i++)
{
if(grad[i] % 2 == 1)
{out << -1; return 0;}
}
euler(1);
for(int i = 0; i < sol.size() - 1; i++)
{
out << sol[i] << " ";
}
return 0;
}