search関数雨かなぁ~

2015年08月27日

search関数 その2

zebraのsolverの盤面構造は下記



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

最初は右側に番兵がいないから場合分けしてるのかと思ってましたが、
関係ないみたいですね、番兵通り過ぎて評価してる部分もあるので、
高速化のための場合分けだと考えられます。
最初の場所は置いていないリストから選ぶので空は保証済みなんでしょうね。
僕の構造体でも同じ場合分けでよいのでは、方向の数を帰るだけでよいでしょう。
ただし、サーチしながら返す場所を覚えているので変更は必要。

BU1A0033

BU1A7221

BU1A8737

BU1A9382

BU1A9469

BU1A9475

洗濯物を乾燥機に入れて荷造りの時間になりました。
もうちょっと検討したかったな。。。

 

hiwata_72 at 21:55│Comments(0)TrackBack(0)mixiチェック

トラックバックURL

コメントする

名前
 
  絵文字
 
 
search関数雨かなぁ~