Pagini recente » Cod sursa (job #281686) | Cod sursa (job #1775020) | Cod sursa (job #1852415) | Cod sursa (job #1039444) | Cod sursa (job #1506949)
#include <cstdio>
#include <vector>
#include <stack>
#include <algorithm>
#define MMAX 500007
#define NMAX 100007
#define pb push_back
using namespace std;
int n, m, aux, sze;
char viz[MMAX];
struct muchie
{
int x;
int y;
} E[MMAX];
vector <int> adj[NMAX], sol;
stack <int> dfs;
int main()
{
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
scanf("%d %d", &n, &m);
for(int i = 1; i<= m; ++i)
{
scanf("%d %d", &E[i].x, &E[i].y);
adj[E[i].x].pb(i);
adj[E[i].y].pb(i);
}
for(int i = 1; i<= n; ++i)
{
if(adj[i].size()&1)
{
printf("-1\n");
return 0;
}
}
dfs.push(1);
while(!dfs.empty())
{
int nod = dfs.top();
//printf("start dfs nod = %d\n", nod);
sze = adj[nod].size();
while(viz[adj[nod][0]] && !adj[nod].empty())
{
swap(adj[nod][0], adj[nod][sze-1]);
adj[nod].pop_back();
--sze;
}
if(!sze)
{
//printf("check nod = %d\n", nod);
sol.pb(nod);
dfs.pop();
continue;
}
viz[adj[nod][0]] = 1;
if(nod != E[adj[nod][0]].x) aux = E[adj[nod][0]].x;
else aux = E[adj[nod][0]].y;
//printf("got to %d\n", aux);
dfs.push(aux);
swap(adj[nod][0], adj[nod][sze-1]);
adj[nod].pop_back();
--sze;
}
sze = sol.size();
for(int i = 0; i< sze; ++i) printf("%d ", sol[i]);
printf("\n");
return 0;
}