Pagini recente » Cod sursa (job #2299080) | Cod sursa (job #2279366) | Cod sursa (job #304319) | Cod sursa (job #569069) | Cod sursa (job #531925)
Cod sursa(job #531925)
#include <stdio.h>
#include <vector>
using namespace std;
#define nmax 100005
#define mx 500005
vector<int> G[nmax];
int sol[nmax];
int N, nr;
void citire ()
{
int M, i, x, y;
freopen("ciclueuler.in","r",stdin);
scanf("%d%d", &N, &M);
for (i = 1; i <= M; ++i)
{
scanf("%d%d", &x, &y);
G[x].push_back(y);
G[y].push_back(x);
}
}
inline void euler(int nod)
{
int x;
vector<int>::iterator it,jt;
it = G[nod].begin();
for ( ; it!=G[nod].end() ; )
{
x = *it;
jt = G[x].begin();
for ( ; jt != G[x].end(); )
{
if (*jt == nod)
{
G[x].erase(jt);
break;
}
jt++;
}
G[nod].erase( G[nod].begin() );
euler(x);
it = G[nod].begin();
}
sol[++nr] = nod;
}
void solve ()
{
int i;
for (i = 1; i <= N; ++i)
if ( G[i].size()%2) { printf("-1\n"); return; }
nr = 0;
euler(1);
}
void afisare ()
{
int i;
for (i = nr; i > 1; --i) printf("%d ", sol[i]);
}
int main ()
{
citire ();
freopen("ciclueuler.out","w",stdout);
solve ();
afisare ();
return 0;
}