diff options
Diffstat (limited to 'src/solve.c')
| -rw-r--r-- | src/solve.c | 24 |
1 files changed, 5 insertions, 19 deletions
diff --git a/src/solve.c b/src/solve.c index df15cca..d5a8f3d 100644 --- a/src/solve.c +++ b/src/solve.c | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | 4 | ||
| 5 | /* Local functions ***********************************************************/ | 5 | /* Local functions ***********************************************************/ |
| 6 | 6 | ||
| 7 | static bool allowed_next(Move move, Step *s, Move l0, Move l1); | ||
| 8 | static bool cancel_niss(DfsArg *arg); | 7 | static bool cancel_niss(DfsArg *arg); |
| 9 | static void copy_dfsarg(DfsArg *src, DfsArg *dst); | 8 | static void copy_dfsarg(DfsArg *src, DfsArg *dst); |
| 10 | static void dfs(DfsArg *arg); | 9 | static void dfs(DfsArg *arg); |
| @@ -19,19 +18,6 @@ static bool solvestop(int d, int op, SolveOptions *opts, AlgList *sols); | |||
| 19 | /* Local functions ***********************************************************/ | 18 | /* Local functions ***********************************************************/ |
| 20 | 19 | ||
| 21 | static bool | 20 | static bool |
| 22 | allowed_next(Move m, Step *s, Move l0, Move l1) | ||
| 23 | { | ||
| 24 | bool allowed, order; | ||
| 25 | uint64_t mbit; | ||
| 26 | |||
| 27 | mbit = ((uint64_t)1) << m; | ||
| 28 | allowed = mbit & s->moveset->mask[l1][l0]; | ||
| 29 | order = !commute(l0, m) || l0 < m; | ||
| 30 | |||
| 31 | return allowed && order; | ||
| 32 | } | ||
| 33 | |||
| 34 | static bool | ||
| 35 | cancel_niss(DfsArg *arg) | 21 | cancel_niss(DfsArg *arg) |
| 36 | { | 22 | { |
| 37 | Moveset *ms; | 23 | Moveset *ms; |
| @@ -82,16 +68,14 @@ copy_dfsarg(DfsArg *src, DfsArg *dst) | |||
| 82 | dst->ind[i].t = src->ind[i].t; | 68 | dst->ind[i].t = src->ind[i].t; |
| 83 | } | 69 | } |
| 84 | 70 | ||
| 85 | /* | ||
| 86 | src->s->copy_extra(src, dst); | 71 | src->s->copy_extra(src, dst); |
| 87 | */ | ||
| 88 | } | 72 | } |
| 89 | 73 | ||
| 90 | static void | 74 | static void |
| 91 | dfs(DfsArg *arg) | 75 | dfs(DfsArg *arg) |
| 92 | { | 76 | { |
| 93 | int i; | 77 | int i; |
| 94 | Move m; | 78 | Move m, l0, l1; |
| 95 | DfsArg newarg; | 79 | DfsArg newarg; |
| 96 | 80 | ||
| 97 | if (dfs_move_checkstop(arg)) | 81 | if (dfs_move_checkstop(arg)) |
| @@ -105,9 +89,11 @@ dfs(DfsArg *arg) | |||
| 105 | 89 | ||
| 106 | for (i = 0; arg->s->moveset->sorted_moves[i] != NULLMOVE; i++) { | 90 | for (i = 0; arg->s->moveset->sorted_moves[i] != NULLMOVE; i++) { |
| 107 | m = arg->s->moveset->sorted_moves[i]; | 91 | m = arg->s->moveset->sorted_moves[i]; |
| 108 | if (allowed_next(m, arg->s, arg->last[0], arg->last[1])) { | 92 | l0 = arg->last[0]; |
| 93 | l1 = arg->last[1]; | ||
| 94 | if (possible_next(m, arg->s->moveset, l0, l1)) { | ||
| 109 | copy_dfsarg(arg, &newarg); | 95 | copy_dfsarg(arg, &newarg); |
| 110 | newarg.last[1] = arg->last[0]; | 96 | newarg.last[1] = l0; |
| 111 | newarg.last[0] = m; | 97 | newarg.last[0] = m; |
| 112 | append_move(arg->current_alg, m, newarg.niss); | 98 | append_move(arg->current_alg, m, newarg.niss); |
| 113 | dfs(&newarg); | 99 | dfs(&newarg); |
