Pagini recente » Cod sursa (job #1008146) | Statistici Dumitru Anca Gabriela (anca.gd) | Cod sursa (job #734989) | Cod sursa (job #2179043) | Cod sursa (job #893335)
Cod sursa(job #893335)
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
ifstream fi ("ciclueuler.in");
ofstream fo ("ciclueuler.out");
const int dim = 100005;
int N, M, IV[dim], viz[5 * dim], R[5 * dim];
vector < pair <int, int> > V[dim];
stack <int> S;
void cit ()
{
fi >> N >> M;
for (int i = 1, a, b; i <= M; i++)
{
fi >> a >> b;
V[a].push_back (make_pair (b, i));
V[b].push_back (make_pair (a, i));
}
}
void dfs (int n)
{
IV[n] = 1;
for (int i = 0, f; i < V[n].size(); i++)
{
f = V[n][i].first;
if (IV[f] == 0)
dfs (f);
}
}
bool verif ()
{
for (int i = 1; i <= N; i++)
if ((V[i].size() & 1) == 1)
return 0;
dfs (1);
for (int i = 1; i <= N; i++)
if (IV[i] == 0)
return 0;
else
IV[i] = 0;
return 1;
}
void rez ()
{
int n, m, f;
S.push (1);
while (!S.empty())
{
n = S.top();
if (IV[n] < V[n].size())
{
f = V[n][IV[n]].first;
m = V[n][IV[n]].second;
IV[n]++;
if (viz[m] == 1)
continue;
viz[m] = 1;
S.push (f);
}
else
{
R[++R[0]] = n;
S.pop ();
}
}
}
void afi ()
{
for (int i = 1; i < R[0]; i++)
fo << R[i] << ' ';
}
int main ()
{
cit ();
if (verif ())
{
rez ();
afi ();
}
else
fo << "-1\n";
return 0;
}