Pagini recente » Cod sursa (job #78374) | Cod sursa (job #1392233) | Cod sursa (job #1864286) | Cod sursa (job #1315684) | Cod sursa (job #2926964)
//solutie cu o stiva si cu stiva sistem
#include <fstream>
#include <vector>
#include <set>
using namespace std;
const int NMAX = 100001;
multiset <int> g[NMAX];
vector <int> sol;
int grad[NMAX];
int cnt;
bool viz[NMAX];
void dfs(int nod)
{
viz[nod] = 1;
cnt++;
for (int x : g[nod])
if (!viz[x])
dfs(x);
}
void euler(int nod)
{
while (!g[nod].empty())
{
int x = *g[nod].begin();
g[nod].erase(g[nod].begin());
g[x].erase(g[x].find(nod));
euler(x);
}
sol.push_back(nod);
}
int main()
{
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
int n, m, i;
cin >> n >> m;
while (m--)
{
int a, b;
cin >> a >> b;
g[a].insert(b);
g[b].insert(a);
grad[a]++;
grad[b]++;
}
dfs(1);
bool ok = 0;
for (i = 1; i <= n; i++)
if (grad[i] % 2)
{
ok = 1;
break;
}
if (cnt != n or ok)
{
cout << -1;
return 0;
}
euler(1);
for (i = sol.size() - 1; i > 0; i--)
cout << sol[i] << ' ';
}