Pagini recente » Cod sursa (job #1472919) | Cod sursa (job #1593667) | Cod sursa (job #2716201) | Cod sursa (job #1332250) | Cod sursa (job #1922839)
#include <fstream>
#include <vector>
using namespace std;
ifstream f ("ciclueuler.in");
ofstream t ("ciclueuler.out");
struct edge{
int to,index;
};
int elim[500010],n,m;
vector <int> sol,stack;
vector <edge> v[100010];
void euler(int nod){
while (v[nod].size()){
edge destination=v[nod].back();
v[nod].pop_back();
if (!elim[destination.index]){
int vec=destination.to;
elim[destination.index]=true;
stack.push_back(nod);
nod=vec;
}
}
}
int main()
{
f>>n>>m;
for (int x,y,i=0;i<m;++i)
f>>x>>y,
v[x].push_back({y,i}),
v[y].push_back({x,i});
for (int i=1;i<=n;++i)
if (v[i].size()&1)
{t<<-1;return 0;}
int x=1;
while (1){
euler(x);
if (stack.empty()) break;
x=stack.back();
stack.pop_back();
sol.push_back(x);
}
for (auto i:sol)
t<<i<<" ";
return 0;
}