Pagini recente » Cod sursa (job #904544) | Cod sursa (job #2687053) | Cod sursa (job #1665881) | Cod sursa (job #1137664) | Cod sursa (job #3208079)
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n, m;
vector<pair<int,int>>G[100001];
int viz[500001];
int viz2[100001];
int grad[100001];
bool once = 0;
bool da;
stack<int>st_dfs;
stack<int>st_ciclu;
void euler_bun(int start)
{
st_dfs.push(start);
while (!st_dfs.empty())
{
int varf = st_dfs.top();
viz2[varf] = 1;
if (G[varf].size() > 0)
{
pair<int, int>it = G[varf].back();
G[varf].pop_back();
if (!viz[it.second])
{
viz[it.second] = 1;
st_dfs.push(it.first);
}
}
else {
st_dfs.pop();
st_ciclu.push(varf);
}
}
}
void citire()
{
f >> n >> m;
int x, y;
for (int i = 1; i <= m; i++)
{
f >> x >> y;
G[x].push_back({ y,i });
G[y].push_back({ x ,i});
grad[x]++;
grad[y]++;
}
}
void afis()
{
if (!st_ciclu.empty())
{
int elem = st_ciclu.top();
st_ciclu.pop();
afis();
g << elem << ' ';
}
}
int main()
{
citire();
for (int i = 1; i <= n; i++) {
if (grad[i] % 2 != 0) {
g << -1;
return 0;
}
}
euler_bun(1);
afis();
}