Pagini recente » Cod sursa (job #177643) | Cod sursa (job #1790936) | Cod sursa (job #2060766) | Cod sursa (job #1739983) | Cod sursa (job #1921874)
#include<fstream>
#include<vector>
#include<stack>
#include<cstring>
#define NMAX 100005
using namespace std;
vector<pair<int, int> > G[NMAX];
stack<int> s;
int n, m, x, y;
int g[NMAX];
int nod, fiu, mch;
bool u[NMAX];
bool prim;
int i;
ifstream _cin("ciclueuler.in");
ofstream _cout("ciclueuler.out");
bool cicle_check()
{
for(i = 1; i <= n; i++)
{
if(g[i] % 2 == 1)
{
_cout << "-1";
return 0;
}
if(u[i] == 0 && g[i] > 0)
{
_cout << "-1";
return 0;
}
}
return 1;
}
void reinit()
{
memset(u, 0, sizeof(u));
}
void euler()
{
reinit();
s.push(1);
prim = 1;
while(!s.empty())
{
nod = s.top();
if(g[nod] == 0)
{
if(prim)
{
prim = 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);
}
}
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);
}
}
}
int main()
{
_cin >> n >> m;
for(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]++;
}
dfs(1);
if(!cicle_check())
{
return 0;
}
euler();
return 0;
}