0
所以我試圖實現一個遞歸函數來生成井字遊戲的整個遊戲樹,我似乎無法讓它工作。我的遞歸函數有什麼問題?
void BuildTree(Node& nNode, const int& nextPlayer)
{
//Copy last board
Ticboard tBoard = nNode.m_board;
do
{
//Return first valid move
int validMove = tBoard.FirstValidMove();
if (validMove != -1)
{
Node f;
Ticboard tempBoard = nNode.m_board;
tempBoard.Move(validMove, nextPlayer);
tBoard.Move(validMove, nextPlayer);
f.m_board = tempBoard;
f.m_winCount = 0;
nNode.m_branches.push_back(f);
int currPlay = (nextPlayer == 1 ? 2 : 1);
BuildTree(f,currPlay);
}
else
{
break;
}
}while(true);
}
實際功能的工作,我已經經歷了和調試它,它顯示了它的工作,因爲它應該是,但是當我看到生成的(對於井字棋的節點,順便說一句)通過斷點在Visual Studios中,它只顯示前9個分支。我知道更多的產生,因爲它需要幾秒鐘,我添加了一個計數器。
這是我如何調用代碼:
Ticboard lol;
Node startTree;
startTree.m_board = lol;
int startPlay = 1;
BuildTree(startTree, startPlay);
沒有抄襲我的位棋盤的所有代碼和諸如此類的東西在這裏,你可以看到什麼立即錯誤的邏輯是什麼?
但是我添加了&nNode,所以它是一個引用,所以稍後會顯示這些更改嗎?如果不是,我該如何解決這個問題? – cam 2010-04-30 16:37:08
啊,只是一個簡單的重新排序。謝謝! – cam 2010-04-30 16:44:13