Hi!
Ich hab folgendes Problem:
Für meinen TicTacToe-gametree verwende ich die klasse TTTTreeNode mit folgenden Funktionen:
Code
void TTTTreeNode::init(char cCurrentplayer) {
TTTBoard* pBoard;
TTTTreeNode* pTTTTreeNode;
// wechsle Spieler
this->cPlayer = (cCurrentplayer==PLAYER_1)?PLAYER_2:PLAYER_1;
// Spiel zu Ende, keine weiteren Kinder
if (this->board->isFilled()) return;
if (this->board->isWon()) return;
// sonst
for (int iy=0; iy<BOARD_Y;++iy) {
for (int ix=0; ix<BOARD_X;++ix) {
pTTTTreeNode = NULL;
// dieser Zug wurde noch nicht gemacht
if (this->board->getField(ix, iy)==NULL) {
// neues Board, identisch mit eigenem Board
pBoard = new TTTBoard(this->board);
// setze Spieler
pBoard->setStone(this->cPlayer, ix, iy);
// neuer Knoten mit dem Board zu diesem Zug
pTTTTreeNode = new TTTTreeNode(pBoard);
// initialiesere Kindknoten
pTTTTreeNode->init(this->cPlayer);
}
this->attach(((iy*BOARD_Y)+ix), pTTTTreeNode);
}
}
}
int TreeNode::count() {
int count = 1;
for (unsigned int i=0; i<this->successors.size();++i) {
if (this->successors[i]!=NULL) count = count + this->successors[i]->count();
}
return count;
}
Alles anzeigen
Die Maximale Anzahl aller möglichen Knoten in TTT sind imho 9! (= 362.880)
Da ja einige Knoten schon früher keine Nachfolger mehr haben, wel sie gewonnene Spielzüge enthalten, sollte die Anzahl der tatsächlichen Knoten noch etwas darunter liegen.
Auf Symetrie und andere Optimierung verzichte ich einstweilen.
Wenn ich init() jetzt von meinem wurzelknoten mit einem leeren board aus aufrufe, wir ein Baum aufgebaut der aus 549946 Knoten besteht.
Also entweder meine count()-Methode ist falsch, oder in der init() klappt was nicht.
Kann mir wer sagen wo der Fehler liegt?