| 276 | // } |
| 277 | |
| 278 | boolean search1(int ct, int sym, int maxl, int lm, int depth) { |
| 279 | if (ct==0) { |
| 280 | return maxl == 0 && init2(sym, lm); |
| 281 | } |
| 282 | for (int axis=0; axis<27; axis+=3) { |
| 283 | if (axis == lm || axis == lm - 9 || axis == lm - 18) { |
| 284 | continue; |
| 285 | } |
| 286 | for (int power=0; power<3; power++) { |
| 287 | int m = axis + power; |
| 288 | int ctx = ctsmv[ct][symmove[sym][m]]; |
| 289 | int prun = csprun[ctx>>>6]; |
| 290 | if (prun >= maxl) { |
| 291 | if (prun > maxl) { |
| 292 | break; |
| 293 | } |
| 294 | continue; |
| 295 | } |
| 296 | int symx = symmult[sym][ctx&0x3f]; |
| 297 | ctx>>>=6; |
| 298 | move1[depth] = m; |
| 299 | if (search1(ctx, symx, maxl-1, axis, depth+1)) { |
| 300 | return true; |
| 301 | } |
| 302 | } |
| 303 | } |
| 304 | return false; |
| 305 | } |
| 306 | |
| 307 | boolean init2(int sym, int lm) { |
| 308 | c1.copy(c); |