【发布时间】:2014-06-14 21:53:01
【问题描述】:
请原谅我是递归的新手,但据我了解这应该可以工作,但它没有。我做了这个在成功找到路径时递归调用自身的方法:
private void RandStep(Point pos)
{
Collections.shuffle(Arrays.asList(directions), rand); //Incorrect, should have a local directions array. Nothing to do with the question though.
for (int i = 0; i < directions.length;i++)
{
//Check if the positions are within map bounds.
if (pos.x + directions[i].x >= 0 && pos.x + directions[i].x < width && pos.y + directions[i].y >= 0 && pos.y + directions[i].y < height)
{
//Check if the position is unvisited.
if (!mazeMap[pos.x + directions[i].x][pos.y + directions[i].y].visited)
{
//Break walls this tile.
CarvePassage(pos, directions[i]);
mazeMap[pos.x + directions[i].x][pos.y + directions[i].y].visited = true;
position.setLocation(pos.x + directions[i].x, pos.y + directions[i].y);
RandStep(position);
}
}
}
}
- 首先它随机化一个具有 4 个方向的数组。
- 然后我循环遍历数组以找到可能的方向。
- 然后它检查找到的方向是否有效,否则它会转到数组中的下一个方向
- 当它有效时,它会调用另一个方法来雕刻当前瓷砖和下一个瓷砖的墙壁。
- 它将当前位置更改为下一个并将其标志设置为已访问。
- 最后它再次调用自己进行下一步。
这一切都有效,直到它第一次卡在访问的单元格或地图边界之间。如果我正确理解递归,它应该退出此方法并转到RandStep 的上一次运行并完成方向循环。当它在那里没有找到任何有效的单元格时:它应该再次退出并完成前一个RandStep 中的循环。这应该重复,直到它完成第一个 RandStep 运行的方向循环。
就像我说的,它会在找不到任何有效单元格的那一刻停止。它不会继续递归堆栈上的先前方法。
【问题讨论】:
标签: java algorithm recursion libgdx path-finding