EulerCircuit.cpp 679 B

1234567891011121314151617181920212223242526
  1. struct Edge {
  2. int from, to;
  3. Edge(int from, int to):from(from),to(to) {}
  4. };
  5. int n; // nombre de sommets.
  6. int G[maxn][maxn]; // G[i][j]= # d'aretes i->j
  7. int deg[i];
  8. vector<Edge> ans; // resultat.
  9. void euler(int u){
  10. for(int v = 1; v <= n; v++) if(G[u][v]) {
  11. G[u][v]--; G[v][u]--; //only G[u][v]--; for directed graph.
  12. euler(v);
  13. ans.push_back(Edge(u, v));
  14. }
  15. }
  16. int solve_euler_path() {
  17. bool solved = true;
  18. for(int i = 1; i <= n; i++)
  19. if(deg[i] % 2 == 1) { solved = false; break; }
  20. if(solved) {
  21. ans.clear();
  22. euler(start);
  23. if(ans.size() != n || ans[0].to != ans[ans.size()-1].from) solved = false;
  24. }
  25. return solved;
  26. }