Pagini recente » Cod sursa (job #3131424) | Cod sursa (job #1032117) | Cod sursa (job #1260947) | Cod sursa (job #283983) | Cod sursa (job #3216729)
#pragma GCC optimize ("O3" , "Ofast" , "unroll-loops")
#include<iostream>
#include<vector>
#include<functional>
using namespace std;
const int NMAX = 1e5 , MMAX = 5e5;
bool viz[MMAX+1];
vector< pair<int , int> > adj[NMAX+1];
int n, m;
bool eulerian ()
{
vector<bool> visited(n+1 , 0);
int nodesVisited = 0;
function<void(int)> dfs = [&](int nod) -> void {
visited[nod] = 1;
nodesVisited++;
for (auto &edge : adj[nod])
{
int to = edge.first;
if (!visited[to]) dfs(to);
}
};
bool ret = 1;
dfs(1);
for (int i = 1; i <= n; i++)
{
if (adj[i].size() % 2 != 0) ret = 0;
if (adj[i].size() > 0 && visited[i] == 0) ret = 0;
}
return ret;
}
bool completed[NMAX+1];
vector<int> eulercycle;
void findEulerCycle (int nod)
{
while (adj[nod].size())
{
int to = adj[nod].back().first , ind = adj[nod].back().second;
adj[nod].pop_back();
if (!viz[ind])
{
viz[ind] = 1;
findEulerCycle(to);
}
}
completed[nod] = 1;
eulercycle.push_back(nod);
}
int main ()
{
freopen("ciclueuler.in" , "r" , stdin);
freopen("ciclueuler.out" , "w" , stdout);
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= m; i++)
{
int x, y; cin >> x >> y;
adj[x].push_back({y,i});
adj[y].push_back({x,i});
}
if (eulerian())
{
findEulerCycle(1);
eulercycle.pop_back();
for (auto &nod : eulercycle)
{
cout << nod << ' ';
}
cout << '\n';
}
else cout << "-1\n";
}