我在C#上开始了一些编码,并尝试了n的问题,稍微做了一些修改(皇后也有骑士的能力),.After是一个限制,它开始显示由于一次又一次调用该函数而导致的堆栈溢出问题。
请任何人帮助我理解问题,我是facing.Below,是n皇后问题的代码。
private int[] BackTrack(int queenRow, int column)
{
for (int i = column; i < size; i++)
{
if (CheckValidMove(queenRow, i))
{
queenPosition[queenRow++] = i;
if (queenRow < size)
return BackTrack(queenRow, 0);
else
{
done = true;
return queenPosition;
}
}
else
continue;
}
if ((queenRow - 1) >= 0 && ((queenPosition[queenRow - 1] + 1) <= size))
{
return BackTrack(queenRow - 1, queenPosition[queenRow - 1] + 1);
}
else
{
return queenPosition;
}
}
queenPosition
(由函数返回)是一个数组,它有放置皇后的列号。4皇后的queenPosition
是(2->0->3->1).4x4棋盘的位置。CheckValid
函数验证该位置是否合适。发布于 2012-07-30 19:09:57
试着改变
if ((queenRow - 1) >= 0 && ((queenPosition[queenRow - 1] + 1) <= size))
{
return BackTrack(queenRow - 1, queenPosition[queenRow - 1] + 1);
}
else
{
return queenPosition;
}
至
if (!((queenRow - 1) >= 0 && ((queenPosition[queenRow - 1] + 1) <= size)))
{
return queenPosition;
}
return BackTrack(queenRow - 1, queenPosition[queenRow - 1] + 1);
您需要帮助编译器并将其优化到尾部 递归。
它可能根本得不到优化,这取决于参数和返回值,但值得一试。
很好地阅读了这个问题-- 劳施克咨询公司的Solutions问题解决方案
祝好运!
https://stackoverflow.com/questions/11727927
复制相似问题