Я пытаюсь, чтобы каждый родительский узел (каждый узел) показывал мне, сколько выигрышей и проигрышей имеет его поддерево.
Это позволит мне играть на компьютере таким образом, чтобы он мог оптимизировать свой ход, перейдя к следующему поддереву, у которого больше всего выигрышей для О.
Сейчас я пытаюсь переставитьдерево, чтобы оно могло просто показать мне, сколько выигрышей и проигрышей имеет его поддерево.
Пока у меня есть дерево, упорядоченное так, что есть 9 поколений.
1) В первом поколении есть 8 братьев и сестер (каждый с дочерними узлами) или 8 возможных ходов для X.
2) Во втором поколении есть 7 братьев и сестер (каждый с дочерними узлами) или 7 возможныхХодит за О.
3) Продолжается до тех пор, пока у последнего поколения не будет нулевых братьев и сестер и полный пансион.
4) У меня 986410 возможных (полных и неполных) досок.
Этот метод в настоящее время печатает количество всех возможных побед (как для X, так и для O) во всем дереве.Однако это удваивает количество узлов дерева, когда оно должно быть меньше, чем исходное количество, потому что не все узлы выигрывают.
public void postOrderTraverse(TreeNode T) {
counter++;
if (T == null) {
return;
} else {
postOrderTraverse(T.firstChild);
postOrderTraverse(T.nextSibling);
// checks diagonals, horizontals and verticals for a set of X's or O's
if (winOrProgress(T.board, X) == true || winOrProgress(T.board, O) == true) {
// prints the game board at this node
char[][] gameBoard = T.board;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
char value = gameBoard[i][j];
System.out.print(value);
}
}
T.firstChild = T;
System.out.print(counter);
System.out.println("Win");
}
}
}