From 20ac0e60d7174114965d4419af0bb3028db8e447 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Mon, 15 Nov 2021 08:29:37 +0100 Subject: Load all necessary pruning tables for a step before the actual solving process starts. This is in preparation for multi-threaded solving (but don't get hyped, it will take time). --- src/solve.c | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) (limited to 'src/solve.c') diff --git a/src/solve.c b/src/solve.c index 1f4a155..29f614b 100644 --- a/src/solve.c +++ b/src/solve.c @@ -127,47 +127,36 @@ AlgList * solve(Cube cube, Step *step, SolveOptions *opts) { AlgListNode *node; - AlgList *sols = new_alglist(); + DfsData dd; Cube c; + prepare_step(step, &dd); + if (step->detect != NULL) step->pre_trans = step->detect(cube); c = apply_trans(step->pre_trans, cube); - DfsData dd = { - .m = 0, - .niss = false, - .lb = -1, - .last1 = NULLMOVE, - .last2 = NULLMOVE, - .sols = sols, - .current_alg = new_alg("") - }; - if (step->ready != NULL && !step->ready(c)) { fprintf(stderr, "Cube not ready for solving step: "); fprintf(stderr, "%s\n", step->ready_msg); - return sols; + return dd.sols; } - moveset_to_list(step->moveset, dd.sorted_moves); - movelist_to_position(dd.sorted_moves, dd.move_position); - for (dd.d = opts->min_moves; dd.d <= opts->max_moves && - !(sols->len && opts->optimal_only) && - sols->len < opts->max_solutions; + !(dd.sols->len && opts->optimal_only) && + dd.sols->len < opts->max_solutions; dd.d++) { if (opts->verbose) fprintf(stderr, "Found %d solutions, searching depth %d...\n", - sols->len, dd.d); + dd.sols->len, dd.d); dfs(c, step, opts, &dd); } - for (node = sols->first; node != NULL; node = node->next) + for (node = dd.sols->first; node != NULL; node = node->next) transform_alg(inverse_trans(step->pre_trans), node->alg); free_alg(dd.current_alg); - return sols; + return dd.sols; } -- cgit v1.3