aboutsummaryrefslogtreecommitdiff
path: root/src/solve.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/solve.c')
-rw-r--r--src/solve.c24
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
7static bool allowed_next(Move move, Step *s, Move l0, Move l1);
8static bool cancel_niss(DfsArg *arg); 7static bool cancel_niss(DfsArg *arg);
9static void copy_dfsarg(DfsArg *src, DfsArg *dst); 8static void copy_dfsarg(DfsArg *src, DfsArg *dst);
10static void dfs(DfsArg *arg); 9static 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
21static bool 20static bool
22allowed_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
34static bool
35cancel_niss(DfsArg *arg) 21cancel_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
90static void 74static void
91dfs(DfsArg *arg) 75dfs(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);

Generated with cgit - Back to sebastiano.tronto.net