2015年08月27日
search関数 その2
zebraのsolverの盤面構造は下記
そして、int board_check_move(const Board *board, int x, int player)の、
最初は右側に番兵がいないから場合分けしてるのかと思ってましたが、
関係ないみたいですね、番兵通り過ぎて評価してる部分もあるので、
高速化のための場合分けだと考えられます。
最初の場所は置いていないリストから選ぶので空は保証済みなんでしょうね。
僕の構造体でも同じ場合分けでよいのでは、方向の数を帰るだけでよいでしょう。
ただし、サーチしながら返す場所を覚えているので変更は必要。
洗濯物を乾燥機に入れて荷造りの時間になりました。
もうちょっと検討したかったな。。。
A | B | C | D | E | F | G | H | |||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | |
2 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | |
3 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | |
4 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | |
5 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | |
6 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | |
7 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | |
8 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | |
81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 |
そして、int board_check_move(const Board *board, int x, int player)の、
#define BOARD_CHECK_MOVE_6(dir) #define BOARD_CHECK_MOVE_4(dir)
A | B | C | D | E | F | G | H | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
1 | 0 | 1 | 1 | 2 | 2 | 2 | 2 | 3 | 3 | |
2 | 0 | 1 | 1 | 2 | 2 | 2 | 2 | 3 | 3 | |
3 | 0 | 4 | 4 | 5 | 5 | 5 | 5 | 6 | 6 | |
4 | 0 | 4 | 4 | 5 | 5 | 5 | 5 | 6 | 6 | |
5 | 0 | 4 | 4 | 5 | 5 | 5 | 5 | 6 | 6 | |
6 | 0 | 4 | 4 | 5 | 5 | 5 | 5 | 6 | 6 | |
7 | 0 | 7 | 7 | 8 | 8 | 8 | 8 | 9 | 9 | |
8 | 0 | 7 | 7 | 8 | 8 | 8 | 8 | 9 | 9 | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
最初は右側に番兵がいないから場合分けしてるのかと思ってましたが、
関係ないみたいですね、番兵通り過ぎて評価してる部分もあるので、
高速化のための場合分けだと考えられます。
最初の場所は置いていないリストから選ぶので空は保証済みなんでしょうね。
僕の構造体でも同じ場合分けでよいのでは、方向の数を帰るだけでよいでしょう。
ただし、サーチしながら返す場所を覚えているので変更は必要。
洗濯物を乾燥機に入れて荷造りの時間になりました。
もうちょっと検討したかったな。。。