5

(たとえば) 1 人のプレイヤーが 4x4 ボード (8 つの異なるパイオン) で何らかのアクションを実行した後、考えられるすべてのボードを一覧表示するにはどうすればよいですか?

たとえば、ピオンは次のようになります。

([1,2,3,4,5,6,7,8])

自動的に再生するたびに、再利用することはできません。

ボードはこのボードのようにする必要があります

([1,1,-,-],(1,2,-,-)...(1,3,-,-)(1,4,-,-)
 [2,1,-,-],(2,2,-,-)...(2,3,-,-)(2,4,-,-)
 [3,1,-,-],(3,2,-,-)...(3,3,-,-)(3,4,-,-)
 [4,1,-,-],(4,2,-,-)...(4,3,-,-)(4,4,-,-)

そして、ラウンドごとに 1 人のプレーヤーが、ボードがいっぱいになるまでパイオンを 1 つ置きます。

4

1 に答える 1

2

のような述語があると仮定しますboard0_move_board/3。これは、ボード B、手 M、および手 M が B で作成された後の結果のボードの間の三項関係です。さらに、board_move/2ボードを手に関連付ける述語があると仮定します。それはそのボードで可能であり、バックトラックでは可能なすべての動きを連続して与えます。これらの述語を使用すると、可能なすべてのボードを次のように取得できます。

findall(Board, (board_move(Board0, Move), board0_move_board(Board0, Move, Board)), Boards)
于 2012-04-07T23:19:40.443 に答える