-3
我試圖創建min-max算法的特定版本,但不幸的是它似乎並沒有像預期的那樣工作。粘貼在下面的函數應該爲tictactoe生成所有可能的結果(場景),並用非負面結果填充列表。不幸的是,它似乎並沒有工作 - 它似乎突然停止(沒有崩潰 - 它仍然有效,但沒有效果)。它甚至不會自行循環。 下面的代碼:「for」循環掛在遞歸算法
void ai::generate(scenario&situation, int who)
{
if(situation.total_moves<9)
{
if(who==-1)
{
int i;
for(i=0;i<9;i++)
{
scenario tmp=situation;
if(!tmp.current_field.game[i])
{
tmp.ai_moves.add(i);
tmp.current_field.game[i]=1;
tmp.total_moves++;
if(tmp.current_field.result()==1)
possibilities.add(tmp);
if(tmp.current_field.result()!=-1)
generate(tmp,1);
}
}
return;
}
if(who==1)
{
int i;
for(i=0;i<9;i++)
{
scenario tmp=situation;//works fine
if(!situation.current_field.game[i])//it's an int
{
tmp.player_moves.add(i);
tmp.current_field.game[i]=2;
tmp.total_moves++;
if(tmp.current_field.result()==1)
possibilities.add(tmp);
if(tmp.current_field.result()!=-1)
generate(tmp,-1);
}//if the code following "if" gets skipped, it hangs
}
return;
}
}
if((!situation.current_field.result())&&(situation.total_moves==8))
possibilities.add(situation);
return;
}
而且,你問之前:這裏使用的其他類的成員函數似乎很好地工作。
如果它只是「突然停止」,那麼它不會掛在身上,與標題相矛盾。明確實際與預期的結果。 –
注意:SO不是羣發調試服務,而是Q&A站點。如果你的問題對別人沒用,那麼它不屬於這裏;因此你應該改善你的問題,以便它對別人有用。調試它,直到你遇到一種你無法解釋的行爲,準確地詢問爲什麼會發生這種情況,而你認爲別的事情應該發生,我們將解釋發生了什麼。 –
tmp.current_field.game [i] = 2; 這是故意分配給2的嗎? – Veritas