Pagini recente » Cod sursa (job #2415703) | Cod sursa (job #713093) | Cod sursa (job #2989941) | Cod sursa (job #2700730) | Cod sursa (job #2185439)
#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] << " ";
}