【发布时间】:2015-12-23 14:45:38
【问题描述】:
所以,有一个任务,我需要使用堆栈解决 N-Queens* 问题。
*N-Queens 问题:您有一个包含 N 行/列/皇后的棋盘。您必须放置每个皇后,使其无法攻击板上的任何其他皇后。
我创建了一个 Queen 类,只是为了存储每个放置的有效皇后的行和列位置,这工作正常。据我所知,我所有的排序和检查逻辑也很好。但是,无论是在 main 函数还是我的求解函数中,我都会遇到分段错误,但只有在调试时才会出现。正常运行时,它就退出了。不幸的是,我的调试器不允许我逐行执行,但我已经手动完成了,但仍然无法解决这个问题。
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中创建堆栈,将它传递给函数,然后使用函数添加到它?如果我理解正确的话。
标签: c++ class vector segmentation-fault stack