Pagini recente » Cod sursa (job #1811358) | Cod sursa (job #897237) | Cod sursa (job #2613428) | Cod sursa (job #1225216) | Cod sursa (job #1568598)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <vector>
using namespace std;
int N, M;
vector<int> con[100001];
bool viz[100001];
int x, y;
void dfs(int nod) {
int i;
viz[nod] = true;
for(i = 0; i < con[nod].size(); i++)
if(!viz[con[nod][i]]) {
dfs(con[nod][i]);
}
}
void do_the_thing(int nod) {
vector<int> rez;
int i, u, uprev;
bool k = true;
u = nod;
while(u != nod || k) {
k = false;
rez.push_back(u);
uprev = u;
u = con[u].back();
con[uprev].pop_back();
con[u].erase(find(con[u].begin(), con[u].end(), uprev));
}
for(i = 0; i < rez.size(); i++) {
while(con[rez[i]].size() > 0)
if(rez[i] != nod)
do_the_thing(rez[i]);
printf("%d ", rez[i]);
}
}
int main() {
int i, j;
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
scanf("%d %d", &N, &M);
for(i = 0; i < M; i++) {
scanf("%d %d", &x, &y);
con[x].push_back(y);
con[y].push_back(x);
}
for(i = 1; i <= N; i++) {
if(!viz[N] || con[i].size() % 2 == 1) {
printf("-1");
return 0;
}
}
do_the_thing(1);
return 0;
}