计算机器人路径(python)

时间:2013-04-17 00:55:23

标签: python-3.x

我不知道如何开始。

让我们的图像为5x5平方。

机器人从左上角开始,然后在右下角。

我们希望机器人从左上角的起点到右下角的终点位置。

在每个方格,机器人只有两个动作中的一个:

它可能会向右或向右移动一个方格 它可能会向下一个方向。

编写程序以确定可以执行多少方法?换句话说,从“开始”到“结束”有多少路径,每个步骤的移动限制如上?

1 个答案:

答案 0 :(得分:0)

这由递归树遍历表示。您可以编写一个递归方法来执行此操作,例如:

traverse_moves,取一个板状态(在这种情况下是机器人的位置)并返回一个整数

计算您可以进行的下一步动作 - 从0到2总计。如果为0,则返回整数1。如果为1或2,则为每个有效移动创建板状态,并使用您创建的状态调用此方法,将所有调用的返回值相加并返回所得的总和。

e.g。对于2x2板,创建机器人位于左上角的状态。这个状态有两个可能的移动,因此它将自动调用机器人左下角和机器人右上角。这些状态中的每一个都有一个可能的动作,并且将自己称为机器人右下角。遍历树的这两个“叶子”将返回1,这些1将返回并传播并累加递归以给出2作为正确答案。

Caller
  | 2
  TL calls itself with BL and TR
/ 1 \ 1
BL  TR call themselves with BR, their only valid move
| 1  | 1
BR   BR return 1s each for being leaf nodes, the 1s are returned and summed

编辑:伪代码

int traverseMoves(BoardState state)
{

    List<BoardState> nextMoves = possibleMovesFrom(state);
    if (nextMoves.Length == 0)
    {
        return 1;
    }

    int returnValue = 0;
    foreach (BoardState move in nextMoves)
    {
        returnValue += traverseMoves(move);
    }
    return returnValue;
}