Pagini recente » Cod sursa (job #978418) | Cod sursa (job #314367) | Cod sursa (job #1759726) | Cod sursa (job #2028701) | Cod sursa (job #1307021)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#define FIN "ciclueuler.in"
#define FOUT "ciclueuler.out"
#define NMAX 100005
#define MMAX 500005
using namespace std;
vector<int> G[ NMAX ];
stack<int> STACK;
int degree[ NMAX ],
sol[ NMAX ],
num_nodes, num_edges,
i,x,y,a,b;
int main() {
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d %d", &num_nodes, &num_edges);
for(i = 1; i <= num_edges; i++) {
scanf("%d %d", &x, &y);
G[ x ].push_back( y );
G[ y ].push_back( x );
degree[ x ]++;
degree[ y ]++;
}
fclose( stdin );
for(i = 1; i <= num_nodes; i++) {
if(degree[ i ] % 2) {
printf("-1");
return 0;
}
}
STACK.push( 1 );
while(!STACK.empty()) {
a = STACK.top();
if(!degree[ a ]) {
sol[++sol[0]] = a;
STACK.pop();
continue;
}
b = G[ a ].back();
G[ a ].pop_back();
degree[ a ]--;
degree[ b ]--;
STACK.push( b );
for(vector<int>::iterator it = G[ b ].begin(); it != G[ b ].end(); ++it) {
if(*it == a) {
G[ b ].erase( it );
break;
}
}
}
for(i = 1; i <= num_edges; i++) printf("%d ", sol[ i ]);
fclose( stdout );
return(0);
};