fork(79) download
  1. /*
  2.   Copyright 2015 Marek "p2004a" Rusinowski
  3.   Finding Euler cycle, Hierholzer's algorithm
  4. */
  5. #include <cstdio>
  6. #include <vector>
  7.  
  8. using namespace std;
  9.  
  10. constexpr int MAXN = 1000000;
  11.  
  12. vector<pair<int, int>> edges[MAXN];
  13. bool used_edge[MAXN];
  14. vector<int> cycle;
  15.  
  16. void euler(int v) {
  17. while (!edges[v].empty()) {
  18. auto u = edges[v].back();
  19. edges[v].pop_back();
  20. if (used_edge[u.second]) continue;
  21. used_edge[u.second] = true;
  22. euler(u.first);
  23. cycle.push_back(v);
  24. }
  25. }
  26.  
  27. int main() {
  28. int n, m;
  29. scanf("%d%d", &n, &m);
  30. for (int i = 0; i < m; ++i) {
  31. int a, b;
  32. scanf("%d%d", &a, &b);
  33. edges[--a].emplace_back(--b, i);
  34. edges[b].emplace_back(a, i);
  35. }
  36.  
  37. for (int i = 0; i < n; ++i) {
  38. if (edges[i].size() % 2 == 1) {
  39. printf("NO\n");
  40. return 0;
  41. }
  42. }
  43.  
  44. euler(0);
  45. for (int i: cycle) {
  46. printf("%d ", i + 1);
  47. }
  48. printf("\n");
  49. }
  50.  
Success #stdin #stdout 0s 16152KB
stdin
7 8
1 2
2 3
3 4
4 5
5 1
3 6
6 7
7 3
stdout
2 3 6 7 3 4 5 1