Pagini recente » Cod sursa (job #1765658) | Cod sursa (job #1696338) | Cod sursa (job #770679) | Cod sursa (job #1448527) | Cod sursa (job #1379860)
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
const int NMAX = 100005;
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int N,M,grad[NMAX],x,y;
vector <int> v[NMAX];
stack <int> S;
bool viz[NMAX];
void sterge(int x, int y)
{
v[x].erase(v[x].begin());
v[y].erase(find(v[y].begin(),v[y].end(),x));
}
void solve()
{
S.push(1);
while (!S.empty())
{
int nod = S.top();
if (v[nod].size())
{
S.push(v[nod][0]);
sterge(nod,v[nod][0]);
}
else
{
g << nod << " ";
S.pop();
}
}
}
void DFS(int nod)
{
viz[nod] = true;
for (int i = 0; i < v[nod].size(); ++i)
{
int vecin = v[nod][i];
if (!viz[vecin])
DFS(vecin);
}
}
int main()
{
f >> N >> M;
for (int i = 1; i <= M; ++i)
{
f >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
grad[x]++;
grad[y]++;
}
DFS(1);
for (int i = 1; i <= N; ++i)
{
if (grad[i] % 2 != 0 || !viz[i])
{
g << "-1";
return 0;
}
}
solve();
}