基本上,我必须编写一个解决n-queen问题的基本程序,我已经完成了,但如果输入任何数字> = 11,它会引发分段错误.
从我在网上看到的,这个错误通常是由处理内存时的错误逻辑引起的,但我似乎无法弄清楚我做错了什么.
void generateBoard(int board[],int column,int length,int count)
{
if(column == 0 && board[0]<length) //prevents outputting the results infinitely
{
++board[0];
generateBoard(board, ++column, length, count);
}
else
{
bool lineNotFound = true;
int row = board[column];
while(lineNotFound && row < length)
{
++row; //temporary value for a column value candidate
lineNotFound = false;
for(int i = 0; i < column && !lineNotFound; ++i)
{
if(board[i] == row || (board[i]+column-i) == row || (board[i]-column+i) == row) // check diagonal …Run Code Online (Sandbox Code Playgroud) 好吧,所以我一直在尝试实现一个默认情况下使用可比数据类型的简单二叉搜索树.
忽略我在课堂上的所有其他方法,这是我认为非常标准的一般设置:
public class BSTNode<E extends Comparable<? super E>>{
E data;
BSTNode<E> left;
BSTNode<E> right;
//and I'm trying to define a static method(inside of the class) like this:
public static <E> String displayAscending(BSTNode<E> node){}
}
Run Code Online (Sandbox Code Playgroud)
但编译器并不喜欢它.现在,我对通用类型有点新意,所以我将解释我对它的作用的理解,这可能有助于你弄清楚我的想法有什么问题.
E extends Comparable所以基本上是一个对象E,它是Comparable的扩展.可比较的元素是E的祖先,它本质上是一种抽象的方式,可以使用Comparable接口将E与其他元素进行比较.
然后在我的静态方法中,我试图以递归方式传递BSTNode.我似乎无法理解为什么它不起作用.我知道如果我通过BSTNode<?>它工作正常,但这似乎很危险.如果有人可以向我解释为什么这不起作用我可以尝试找到另一种解决方案.