Pagini recente » Cod sursa (job #2259797) | Cod sursa (job #672352) | Cod sursa (job #2575974) | Cod sursa (job #1706929) | Cod sursa (job #1567975)
#include<stdio.h>
using namespace std;
const int N = 100005, M = 500005;
struct vect
{
int x, y;
};
vect v[N];
int lst[N], urm[M], muchie[M], nr, c[M], nrc;
bool fol[M], grad[N];
void adauga (int x, int i)
{
muchie[++nr] = i;
urm[nr] = lst[x];
lst[x] = nr;
}
int celalalt (int i, int x)
{
if (v[i].x == x)
return v[i].y;
return v[i].x;
}
void euler (int x)
{
int m, p, y;
p = lst[x];
while (p != 0)
{
m = muchie[p];
if (fol[m] == false)
{
fol[m] = true;
y = celalalt(m, x);
euler (y);
}
p = urm[p];
}
c[++nrc] = x;
}
int main ()
{
FILE *in, *out;
in = fopen ("ciclueuler.in", "r");
out = fopen ("ciclueuler.out", "w");
int n, m, i;
fscanf (in, "%d%d", &n, &m);
for (i = 1; i <= m; i++)
{
fscanf (in, "%d%d", &v[i].x, &v[i].y);
adauga (v[i].x, i);
adauga (v[i].y, i);
grad[v[i].x] = 1 - grad[v[i].x];
grad[v[i].y] = 1 - grad[v[i].y];
}
euler(1);
for (i = 1; i <= m; i++)
if (grad[i])
{
fprintf (out, "-1");
return 0;
}
for (i = 1; i <= m; i++)
fprintf (out, "%d ", c[i]);
return 0;
}