私はTic-Tac-Toeゲーム(3x3)でアルファベータプルーニングアルゴリズムに取り組んでいます。現在、3x3グリッドの任意のインスタンスについて、最良のケースを見つけることができました。
public Best chooseAlphaBetaMove(int whosMov, int alpha, int beta) {
Best reply = new Best();
Best myBest = new Best();
if ((scoreGrid()==COMPUTER_WIN) || (scoreGrid()==OPPONENT_WIN) ||
(scoreGrid()==GAME_DRAW)) {
int score = scoreGrid();
return new Best(score,-3,-3,count);
}
if (whosMov==COMPUTER_MOVE) {
myBest.score = alpha;
} else {
myBest.score = beta;
}
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
if (layOut[i][j]==0) {
moveGrid(whosMov,i,j);
reply = chooseAlphaBetaMove(-whosMov,alpha,beta);
unmoveGrid(i,j);
if ((whosMov==COMPUTER_MOVE)&&(reply.score>myBest.score)) {
myBest.score = reply.score;
alpha = reply.score;
myBest.row = i;
myBest.column = j;
}
if ((whosMov==OPPONENT_MOVE)&&(reply.score<myBest.score)) {
myBest.score = reply.score;
beta = reply.score;
myBest.row = i;
myBest.column = j;
}
if (beta <= alpha) return myBest;
}
}
}
return myBest;
}
最適な構造は次のとおりです。
public class Best {
public int score;
public int row;
public int column;
public int count
}
最初のグリッドと次に移動する人を考えると、この次のプレーヤーが進むための最高のスコアと最高の位置を知ることができます。しかし、私はこの最良の動きのためにパス全体を印刷する方法を理解することはできません。(注-検索パス全体は必要ありません。この最良の移動からリーフまでの単一の検索パスのみを印刷したいと思います)。何かご意見は?ありがとう!