Pagini recente » Cod sursa (job #2331954) | Cod sursa (job #1692028) | Cod sursa (job #2433372) | Cod sursa (job #2334871) | Cod sursa (job #1497836)
#include<stdio.h>
using namespace std;
const int N = 100005,
M = 500005;
int e[2 * M], urm[2 * M], lst[N], x[N], y[N], nr, folosit[N], ok = true, rc, viz[M], p, i2, c[M], pare[N];
int celalalt (int i, int x2)
{
if (y[i] != x2)
return y[i];
return x[i];
}
void adauga (int i)
{
e[++nr] = i;
urm[nr] = lst[x[i]];
lst[x[i]] = nr;
e[++nr] = i;
urm[nr] = lst[y[i]];
lst[y[i]] = nr;
}
void euler (int x2)
{
int y;
p = lst[x2];
while (p != 0)
{
i2 = e[p];
y = celalalt (i2, x2);
if (!folosit[i2])
{
folosit[i2] = true;
euler(y);
}
p = urm[p];
}
c[++rc] = x2;
}
int main ()
{
FILE *in, *out;
in = fopen ("ciclueuler.in", "r");
out = fopen ("ciclueuler.out", "w");
int n, m;
fscanf (in, "%d%d", &n, &m);
int i;
for (i = 1; i <= m; i++)
{
fscanf (in, "%d%d", &x[i], &y[i]);
pare[x[i]]++;
pare[y[i]]++;
adauga(i);
}
euler(1);
int ok2 = true;
for (i = 1; i <= rc; i++)
viz[c[i]] = true;
for (i = 1; i <= n; i++)
{
if (viz[i] == 0)
ok2 = false;
if (pare[i] % 2 != 0)
ok = false;
}
if (ok == true && ok2 == true)
for (i = 1; i <= rc - 1; i++)
fprintf (out, "%d ", c[i]);
else
fprintf (out, "-1");
return 0;
}