C ++:如何解决这个递归拼图(子集和样式)

时间:2012-12-15 23:27:10

标签: c++ recursion

请给我一些指示,说明为什么我的代码不能用于此作业。我的想法是有一个index(param)是Vector中的当前位置,target(param)是数组中给定索引的值。然后我要么向上或向下移动,直到到达其中一个基本案例。但它不起作用。

主要问题是到目前为止它只输出错误的结果。

enter image description here

bool RecursivePuzzle :: SolvableReal(Vector<int> & squares, int index, int target)
{
if (target == 0 && index == squares.size() ) return true;
if (index >= squares.size()) return false;
if (index < 0) return false;

int goUp = squares[index] + index;
int goDown = squares[index] - index;

return SolvableReal(squares, goUp, squares[index]) ||
       SolvableReal(squares, goDown, squares[index]);

2 个答案:

答案 0 :(得分:3)

可能不是整个答案,但这部分看起来不对:

int goUp = squares[index] + index;
int goDown = squares[index] - index;

我认为应该是

int goUp = index + squares[index];
int goDown = index - squares[index];

答案 1 :(得分:2)

不应将您的最终解决方案状态与大小进行比较 - 1?

if (target == 0 && index == squares.size() - 1 ) return true;