在2d数组中的C ++路径查找

时间:2013-02-15 15:28:19

标签: arrays path-finding

我一直在努力应对我的讲师提供的这一挑战。我编写了设置此解决方案所需类的文件,但我不知道如何实现它,这是我需要添加算法的类。

#include "Solver.h"

int* Solver::findNumPaths(const MazeCollection& mazeCollection)
{
    int *numPaths = new int[mazeCollection.NUM_MAZES];


    return numPaths;
}

这是我们提供的问题描述。有没有人知道如何实现这一点或让我走上正轨,谢谢!

<00> 00C,我们需要你的帮助。

生气被挫败,邪恶的恶魔策划者Russello Kane博士发动了一系列重型松鼠攻击BCB并消灭所有令人愉快的美丽和智力优越的计算机学生。

我们需要在短时间内对此威胁作出反应,并计划部分阻挡BCB的门厅。持枪的松鼠将以方[1,1]进入BCB,然后冲向[10,10]所示的出口。

对于毛茸茸的啮齿动物来说,有障碍的方形无法通行。重要的是,松鼠嗜血是这样的,他们只会朝着出口移动 - 向右移动一个方格,或向下移动一个方格。松鼠永远不会向上或向左移动,即使路障挡住他们的路线。

我们的boffins需要进行大量测试,以确定路障的位置将如何阻碍松鼠的移动。在每次测试中,都会有多个方块,你必须确定从开始到出口的不同路径的总数(遵守上面提到的松鼠运动模式)。

我们听到很多棺材都在喋喋不休地谈论递归计数算法的不连贯性,其他人关于递归和迭代之间的联系,但我相信,OOC,你知道最好不要被误导性建议分心。 / p>

1 个答案:

答案 0 :(得分:0)

从显而易见开始:

int count = 0;

void countPaths( x, y ) {
  if ( x==10 && y==10 ) {
    count++;
    return;
  }
  if ( can-move-right )
    countPaths( x+1, y );
  if ( can-mopve-down )
    countPaths( x, y+1 );
}

首先致电countPaths(0,0)

远射不是最有效的,但它会起作用。然后寻找优化的方法(例如,你最终从靠近目标的方块重新计算路径很多 - 减少这项工作会产生很大的不同)。