我不知道如何开始。
让我们的图像为5x5平方。
机器人从左上角开始,然后在右下角。
我们希望机器人从左上角的起点到右下角的终点位置。
在每个方格,机器人只有两个动作中的一个:
它可能会向右或向右移动一个方格 它可能会向下一个方向。
编写程序以确定可以执行多少方法?换句话说,从“开始”到“结束”有多少路径,每个步骤的移动限制如上?
答案 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;
}