C ++ 9x9单元板球运动路径检查

时间:2013-04-20 15:35:45

标签: c++ algorithm recursion path-finding

有一个带有不同颜色球的9x9单元板(2d阵列)。玩家可以将球从一个小区移动到另一个小区。球可以在当前小区和目标小区之间的小区上以无球的路径移动。

我只想在执行此路径检查时必须使用重复。 但我不知道如何实现这个功能。

我曾试图实现这个功能。但我知道它会导致无限循环。

bool board::moveCheck(int x1, int y1, int x2, int y2)
{
    if(x1==x2&&y1==y2)
        return true;
    else if(y1-1>=0)
        board::moveCheck(x1,y1-1,x2,y2);
    else if(y1+1<9)
        board::moveCheck(x1,y1+1,x2,y2);
    else if(x1-1>=0)
        board::moveCheck(x1-1,y1+1,x2,y2);
    else if(x1+1<9)
        board::moveCheck(x1+1,y1+1,x2,y2);
    else
        return false;
}

1 个答案:

答案 0 :(得分:1)

您的代码存在许多问题,很难看到如何在没有完全重写的情况下修复它。以下是一些指示:

  1. 递归调用函数时,需要执行某些操作 带有返回值。现在你把它扔掉了。

  2. 您的代码有undefined behaviour,因为它并不总是返回值。考虑y1 - 1 >= 0的情况。你将调用moveCheck(),抛弃返回值(假设它甚至都返回),然后退出条件块,此时函数结束,而不返回任何内容。

  3. 您有一个似乎不检查任何成员变量的成员函数。哪里 你在检查路径上是否有障碍物?

  4. 并不完全清楚x1y1x2y2是什么。要么给他们自己记录姓名,要么提供记录评论。我猜测他们是源和目标坐标,但是不清楚为什么你要将它们相互比较,如果它是在球的存在您感兴趣的路径。