Pagini recente » Cod sursa (job #3235556) | Cod sursa (job #139983) | Cod sursa (job #2902672) | Cod sursa (job #1634973) | Cod sursa (job #1968990)
#include<fstream>
#include<vector>
#include<stack>
#include<cstring>
#define NMAX 100005
#define MMAX 500005
using namespace std;
vector<pair<int, int> > G[NMAX];
stack<int> s;
int n , m, x, y;
int nod, fiu, mch;
int g[NMAX];
bool first;
bool u[MMAX];
ifstream _cin("ciclueuler.in");
ofstream _cout("ciclueuler.out");
void dfs(int nod)
{
u[nod] = 1;
for(int i = 0; i < G[nod].size(); i++)
{
int fiu = G[nod][i].first;
if(u[fiu] == 0)
{
dfs(fiu);
}
}
}
bool check_euler()
{
for(int i = 1; i <= n; i++)
{
if(g[i] % 2 == 1)
{
_cout << "-1";
return 0;
}
if(g[i] > 0 && u[i] == 0)
{
_cout << "-1";
return 0;
}
}
return 1;
}
void reinit()
{
memset(u, 0, sizeof(u));
}
void euler()
{
s.push(1);
first = 1;
while(!s.empty())
{
nod = s.top();
if(g[nod] == 0)
{
if(first)
{
first = 0;
}else
{
_cout << nod << " ";
}
s.pop();
continue;
}
while(u[G[nod].back().second] == 1)
{
G[nod].pop_back();
}
fiu = G[nod].back().first;
mch = G[nod].back().second;
u[mch] = 1;
g[nod]--;
g[fiu]--;
s.push(fiu);
}
}
int main()
{
_cin >> n >> m;
for(int i = 1; i <= m; i++)
{
_cin >> x >> y;
G[x].push_back(make_pair(y, i));
G[y].push_back(make_pair(x, i));
g[x]++;
g[y]++;
}
for(int i = 1; i <= n; i++)
{
if(u[i] == 0)
{
dfs(i);
break;
}
}
if(check_euler())
{
reinit();
euler();
}
return 0;
}