自己割り当てのプロジェクトでは、tic-tac-toeのすべての可能なゲームを試してみることにしました。これらのゲームをそれぞれ保存して表現するために、私は9列と362880行の行列を使うことにしました。各行は1つのゲームであり、奇数列は「X」の動きであり、偶数列は「O」の動きである。重複する整数を含まない9桁の数字の行列を作成
(1,2,3,4,5,6,7、NULL、NULL)は、Xが勝つゲームを表します。
私は重複整数は、プレイヤーが既に占有されている位置をマークしようとしたことを意味するように、重複した整数が含まれていないすべての9桁の番号を生成したい理由です。以下は
一つの可能な方法の始まり
#create matrix that can contain all possible arrangements of moves on a tic-tac-toe board
tictactoematrix <- matrix(ncol = 9, nrow = 362880)
j = 1
k = 1
#create list of possible moves
move <- list(1,2,3,4,5,6,7,8,9)
#populate every row with numbers 1-9
for(i in 1:362880){
tictactoematrix[i,1] <- move[[1]]
move[1] <- NULL
tictactoematrix[i,2] <- move[[1]]
move[1] <- NULL
tictactoematrix[i,3] <- move[[1]]
move[1] <- NULL
tictactoematrix[i,4] <- move[[1]]
move[1] <- NULL
tictactoematrix[i,5] <- move[[1]]
move[1] <- NULL
tictactoematrix[i,6] <- move[[1]]
move[1] <- NULL
tictactoematrix[i,7] <- move[[1]]
move[1] <- NULL
tictactoematrix[i,8] <- move[[1]]
move[1] <- NULL
tictactoematrix[i,9] <- move[[1]]
move[1] <- NULL
move <- list(1,2,3,4,5,6,7,8,9)
}
出力されます:
は今、明らかに問題は、私はなりそれぞれにそれらをしたいしながら、すべての行が、同一であることですユニーク。そして、私は私の人生のために把握することはできませんすることは、すべての可能な組み合わせに
move <- list(1,2,3,4,5,6,7,8,9)
内のすべての番号を再配置する方法です。
あなたはすべての順列を生成したいです。この[SO答え](http://stackoverflow.com/questions/11095992/generating-all-distinct-permutations-of-a-list-in-r)が行います。 – aichao
ツリーは、最終的な移動の前にゲームが終了することを考慮して、より自然な構造のように見えます。また、すべての回転と反転の対称性を崩壊させることもできます。最初の移動を「コーナー」、「サイド」または「ミドル」とし、それに対する相対的な移動を定義します。 – Frank
良いデータ構造は、いくつかの子と値(あなたの場合は行列)を持つ再帰的な木です。ブランチは、そのポジションからの許可された移動、またはすべての可能な移動のみであり、次にそれをクリーンアップします。 – FisherDisinformation