问题状态:“想象一个机器人坐在网格的左上角,有r行和c列。机器人只能在两个方向上向右和向下移动,但是某些单元格是”不受限制“,因此机器人不能踩到它们。设计一个算法,从左上角到右下角找到机器人的路径。“
我的解决方案是执行以下操作:
while grid[r-1, c] !=null && grid[r-1][c] !=false
{
moveRobotDown();
}
while grid[r, c-1] !=null && grid[r][c-1] !=false
{
moveRobotRight();
}
----在两个while循环之后,我将使用新的r,c坐标对函数进行递归调用。
这似乎是一个非常简单的实现,但答案密钥有一个非常冗长和复杂的解决方案。任何人都可以向我解释为什么我的工作无效吗?
答案 0 :(得分:1)
如果你有一个像这样的'地图'(其中|
是路径而*
是机器人最终的地方),那就行不通了。
|
|
|
*X
XX
'机器人'会尽可能向下移动,然后无法向右移动,你的算法就会失败。
我建议您阅读树遍历,尤其是A*。
答案 1 :(得分:0)
易。大约10行代码,时间与行x列成比例。
定义:如果您可以从右下角到达,则单元格“正常”。在第一遍中,您确定所有细胞都很好。只需检查从上到下的行,从右到左的每行的列:如果它不是“禁止”,则单元格是正常的,如果它是右下角,或者如果它在上面或者是一个细胞的左边是好的。
如果左上角不好则有一个解决方案。否则,从左上角开始。只要你没有到达右下角,你就可以向下或向右转到一个很好的单元格。
答案 2 :(得分:0)
尝试使用bfs或dfs。将此问题视为:从一个点到另一个点的最短路径。 使用递归和访问数组,即dfs可以快速解决此问题。