因此,我需要使用堆棧解決N-Queens *問題。調試C++期間的分段錯誤
* N皇后問題:你有一個N行/列/皇后棋盤。您必須放置每個皇后,以便它不會攻擊棋盤上的其他任何棋子。
我創建了一個Queen類,用於存儲每個放置的有效皇后的行和列位置,並且工作正常。據我所知,我所有的排序和檢查邏輯也很好。但是,無論是在主或我的求解功能,我得到一個分段錯誤,但只有當我調試。當正常運行時,它就會退出。不幸的是,我的調試器不能讓我一行一行,但我已經手動完成,仍然無法弄清楚。
void solve(int k, int N)
{
stack<Queen> queenStack;
if(k == N)
{
while(!queenStack.empty())
{
cout << queenStack.top().rowPos << ", " << queenStack.top().colPos << endl;
queenStack.pop();
}//end while
}//endif
else
{
for (int i = 0;i < N; i++)
{
if (isSafe(k,i))
{
Queen queen(k,i);
queenStack.push(queen);
solve(k++,N);
}//end if
else
{
if(queenStack.empty())
{
break;
}//end if
else
{
queenStack.pop();
k--;
}//end else
}//end else
}//end for
}//end else
}//end void
那麼我的主要:
int main()
{
int N = 0;
cout << "Please pick an integer 3 or greater and less than whatever you think won't crash your computer." << endl;
cin >> N;
while (N < 3)
{
cout << "Please pick an integer 3 or greater and less than whatever you think won't crash your computer." <<
endl;
cin >> N;
}//end while
solve(0,N);
return 0;
}//end main
我ifSafe是布爾函數只是做基於行的檢查,這是我傳遞作爲一個int,然後返回真/假的循環。
'queenStack'是'solve'函數的本地對象。在遞歸之前添加它並不會影響該調用。 –
所以我需要在main中創建堆棧,將它傳遞給函數,然後使用函數添加到它中?如果我理解正確。 – MathiasOrdun