Alex_tz307

Eulerian circuit - recursive

Nov 5th, 2020 (edited)
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.92 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ifstream fin("ciclueuler.in");
  6. ofstream fout("ciclueuler.out");
  7.  
  8. vector < vector < pair < int , int > > > G;
  9. vector < bool > viz;
  10. vector < int > sol;
  11.  
  12. void DFS(int node) {
  13.     while(!G[node].empty()) {
  14.         auto vec = G[node].back();
  15.         G[node].pop_back();
  16.         if(!viz[vec.second]) {
  17.             viz[vec.second] = true;
  18.             DFS(vec.first);
  19.         }
  20.     }
  21.     sol.emplace_back(node);
  22. }
  23.  
  24. int main() {
  25.     int N, M;
  26.     fin >> N >> M;
  27.     G.resize(N + 1);
  28.     viz.resize(M);
  29.     for(int i = 0; i < M; ++i) {
  30.         int u, v;
  31.         fin >> u >> v;
  32.         G[u].emplace_back(v, i);
  33.         G[v].emplace_back(u, i);
  34.     }
  35.     for(int i = 1; i <= N; ++i)
  36.         if(G[i].size() & 1) {
  37.             fout << -1;
  38.             return 0;
  39.         }
  40.     DFS(1);
  41.     sol.pop_back();
  42.     for(int node : sol)
  43.         fout << node << ' ';
  44. }
Add Comment
Please, Sign In to add comment