所以使用下面的代码,我应该能够读入数组,选择一个起始点(通常是数组[0],然后在给定索引处添加或减去该值以在数组中移动这个谜题的目的是使用递归函数到达数组的最后一个元素。我现在的问题是它总是告诉我它是可解的(这是我想要的),但不是在它的情况下实际上不是一个可解决的数组。 当我传递数组
int array[] = { 3, 6, 4, 1, 3, 4, 2, 5, 3, 0 };
bool solved = IsSolvable(0, array, 10);
它应该正常工作。但是当我通过它时
int arraytest[] = { 3, 1, 2, 3, 0 };
bool solved2 = IsSolvable(0, arraytest, 5);
它没有说应该返回false。它应该是不可能的,因为当它到达arraytest [4]时,值为3,它将无限地在3和3之间。我在我的代码中修复了这个,所以不会有循环,但我仍然希望它返回该数组无法解析。谁能明白为什么不呢?
bool IsSolvable(int index, int array[], int size){
if (index == size - 1){ return true; }
else if (index > size - 1 || index < 0){
return false;
}
else if (array[index] == -1) { cout << "here i am" << endl; return false; }
else {
int temp = array[index];
array[index] = -1;
bool found = IsSolvable(index + array[index], array, size) || IsSolvable(index - array[index], array, size);
array[index] = temp;
return found;
}
}
我会附上一张照片,以便更容易理解。
答案 0 :(得分:4)
代码中的小错误,在:
bool found = IsSolvable(index + array[index], array, size) || IsSolvable(index - array[index], array, size);
您需要使用temp而不是array [index],如:
bool found = IsSolvable(index + temp, array, size) || IsSolvable(index - temp, array, size);
答案 1 :(得分:0)
试试这个:
bool IsSolvable(int index, int array[], int size){
if (index == size - 1){ return true; }
else if (index > size - 1 || index < 0){
return false;
}
else
{
bool found = IsSolvable(index + array[index], array, size) || IsSolvable(index - array[index], array, size);
if (array[index] == array[index + array[index]] || array[index] == array[index - array[index]])
{
return false;
}
return found;
}
}
未经测试但应该给你足够的帮助