Pagini recente » Cod sursa (job #1874559) | Cod sursa (job #2595095) | Cod sursa (job #1704858) | Cod sursa (job #1518938) | Cod sursa (job #2857117)
#include <fstream>
#include <vector>
#include <stack>
#include <bitset>
using namespace std;
ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");
vector < vector <int> > g;
vector < pair <int, int> > e;
vector <int> sol;
bitset <500005> used;
int n, m;
void citire()
{
fin>>n>>m;
int x, y;
g = vector < vector <int> > (n+2);
e = vector < pair <int, int> > (m+2);
for (int i=1; i<=m; ++i)
{
fin>>x>>y;
g[x].push_back(i);
g[y].push_back(i);
e[i].first=x; e[i].second=y;
}
fin.close();
}
bool euler()
{
for (int i=1; i<=n; ++i)
if (g[i].size()%2!=0) return 0;
return 1;
}
void make_euler()
{
int ed, x, y;
stack <int> st;
st.push(1);
while (!st.empty())
{
x=st.top();
if (!g[x].empty())
{
ed=g[x].back(); g[x].pop_back();
if (!used[ed])
{
used[ed]=1;
int to = e[ed].first ^ e[ed].second ^ x;
st.push(to);
}
}
else
{
st.pop();
sol.push_back(x);
}
}
}
int main()
{
citire();
if (!euler()) {fout<<-1; return 0;}
else
{
make_euler();
for (int i=0; i<sol.size()-1; i++) fout<<sol[i]<<' ';
}
return 0;
}