Pagini recente » Cod sursa (job #29387) | Cod sursa (job #2934330) | Cod sursa (job #2174373) | Cod sursa (job #2671014) | Cod sursa (job #2279230)
#include <bits/stdc++.h>
#define NM 100002
#define MM 500002
using namespace std;
struct edge
{
int u, v;
bool viz;
int other(int u)
{
return this->u + this->v - u;
}
};
int n, m;
edge edges[MM];
vector <edge*> gr[NM];
vector <int> ans;
void euler(int u)
{
while(!gr[u].empty() && gr[u].back()->viz)
gr[u].pop_back();
for(int i = gr[u].size() - 1; i >= 0; i--)
if(gr[u][i]->viz == 0)
{
gr[u][i]->viz = 1;
euler(gr[u][i]->other(u));
}
ans.push_back(u);
}
int main()
{
ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
fin >> n >> m;
for(int i = 1; i <= m; i++)
{
fin >> edges[i].u >> edges[i].v;
edges[i].viz = 0;
gr[edges[i].u].push_back(&edges[i]);
gr[edges[i].v].push_back(&edges[i]);
}
euler(1);
if(ans.size() != m + 1 || ans.front() != ans.back())
fout << "-1\n";
else
{
ans.pop_back();
for(auto i : ans)
fout << i << " ";
}
return 0;
}