treewalk.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <chrono>
  4. #include <cmath>
  5. #include <cpuid.h>
  6. #include <fstream>
  7. #include <csignal>
  8. #include <unistd.h>
  9. #include "treewalk.hpp"
  10. using namespace std;
  11. /*void treat(const Semigroup& m){
  12. int q=ceil(float(m.conductor)/float(m.min));
  13. unsigned int rho=q*m.min-m.conductor;
  14. if(m.wilf<=rho){
  15. if((m.wilf<0) or (m.wilf<=rho and m.e>2 and m.left_primitive>1 and q>=4)){
  16. //output(m,file_out);
  17. }
  18. }
  19. }*/
  20. void walk(Stack& stack,Results& res){
  21. Semigroup *current,*son;
  22. Semigroup temp;
  23. while(not stack.is_empty()){
  24. current = stack.pop();
  25. size_t g=current->genus;
  26. if(g<MAX_GENUS-1){
  27. auto it=generator_iter<CHILDREN>(*current);
  28. ind_t pos=0;
  29. while(it.move_next()){
  30. remove_generator(temp, *current, it.get_gen(),pos++);
  31. if(not cut(temp)){
  32. treat(temp,res);
  33. son=stack.pushed();
  34. *son=temp;
  35. }
  36. }
  37. }
  38. else{
  39. auto it = generator_iter<CHILDREN>(*current);
  40. ind_t pos=0;
  41. while(it.move_next()){
  42. remove_generator(temp, *current, it.get_gen(),pos++);
  43. if(not cut(temp)){
  44. treat(temp,res);
  45. }
  46. }
  47. }
  48. }
  49. }