#include #include #include #include #include #include #include "treewalk.hpp" using namespace std; using namespace std::chrono; fstream file; void treat(const monoid& m){ // int w=m.e*m.left-m.conductor; int q=ceil(float(m.conductor)/float(m.min)); unsigned int rho=q*m.min-m.conductor; if(m.wilf<=rho){ if((m.wilf<0) or (m.wilf<=rho and m.e>2 and m.left_primitive>1 and q>=4)){ output(m,file); } } } //static const int mcut=ceil(float(3*(MAX_GENUS+2))/5); bool cut(const monoid& m){ if(3*m.left_primitive>=m.min) return true; return false; } void walk(int m,int k) { monoid data[MAX_GENUS-1], *stack[MAX_GENUS], *current,temp,temp2; monoid **stack_pointer = stack+1; for (ind_t i=1; i(data[i]); it.move_next(); // printq_monoid_gen(data[i]); ind_t pos=0; if(i==0){ it.move_next(); pos=1; } remove_generator(data[i+1],data[i],it.get_gen(),pos); } temp=data[k]; stack[0]=&temp; cout<<"Root : "; print_monoid_gen(temp); auto it = generator_iter(temp); it.move_next(); ind_t pos=1; if(k==0){ it.move_next(); ++pos; } while (it.move_next()){ stack_pointer[0] = stack_pointer[1]; remove_generator(**stack_pointer, temp, it.get_gen(),pos++); cout<<"Pop "<genus < MAX_GENUS - 1) { auto it = generator_iter(*current); ind_t pos=0; while (it.move_next()) { // exchange top with top+1 stack_pointer[0] = stack_pointer[1]; remove_generator(**stack_pointer, *current, it.get_gen(),pos++); treat(**stack_pointer); stack_pointer++; } *stack_pointer = current; } else { auto it = generator_iter(*current); ind_t pos=0; while (it.move_next()) { remove_generator(temp2, *current, it.get_gen(),pos++); treat(temp2); } } } } } int main(int argc, char **argv) { if(argc!=4){ cerr<<"Usage : "<=MAX_GENUS-m){ cerr<<"k must be in [0,MAX_GENUS-m]"< ticks = end-begin; cout << " Computation time = " << std::setprecision(4) << ticks.count() << " s." << endl; file.close(); return EXIT_SUCCESS; }