Pagini recente » Cod sursa (job #2757387) | Cod sursa (job #1755878) | Cod sursa (job #2717894) | Cod sursa (job #574954) | Cod sursa (job #2188695)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int NMAX = 100004;
vector <pair<int, int> > v[NMAX];
vector<int> solutie;
stack<int> stiva;
int viz[5*NMAX], n, m;
int main()
{
f>>n>>m;
for (int i=1;i<=m;i++)
{
int x,y;
f>>x>>y;
v[x].push_back(make_pair(y,i));
v[y].push_back(make_pair(x,i));
}
for (int i=1;i<=n;i++)
{
if (v[i].size()%2==1)
{
g<<"-1";
return 0;
}
}
stiva.push(1);
while (!stiva.empty())
{
int nod=stiva.top();
if (v[nod].size()==0)
{
solutie.push_back(nod);
stiva.pop();
}
else
{
int edge=v[nod].back().second;
int y=v[nod].back().first;
v[nod].pop_back();
if (!viz[edge])
{
viz[edge]=1;
stiva.push(y);
}
}
}
for (int i=0;i<solutie.size()-1;i++)
g<<solutie[i]<<" ";
}