我正在从一本书中回答这个问题:
网格中的机器人:想象一个机器人坐在网格的左上角,其中有r行和c列。机器人只能在左右两个方向上移动,但是某些单元格处于“禁区”,因此机器人无法踩踏它们。设计一种算法,以从左上角到右下角找到机器人的路径。
我为此写了一个解决方案,但这是不正确的。
我打印出了辅助函数中的路径。都正确,但是当它返回path_through_grid()函数时,它更改为其他内容。我不知道这里发生了什么。请帮忙〜
以下是我编写的代码:
def path_through_grid(grid):
path = ["start"]
helper(grid, 0, 0, path)
print("final", path)
if path[-1]=='end':
return path
else:
return None
def helper(grid, r, c, path):
print("start---", r, " - ", c, "path: ", path)
if r == len(grid) or c == len(grid[0]):
return
if grid[r][c] == 1:
return
if r == len(grid)-1 and c == len(grid[0])-1:
print("inside")
path.append("end")
return
path.append("right")
helper(grid, r, c+1, path)
print("middle---", r, " - ", c, "path: ", path)
if path[-1]=="end":
print("inside 2", path)
return
path = path[:-1]
print("after", path)
path.append("down")
helper(grid, r+1, c, path)
print("end---", r, " - ", c, "path: ", path)
import unittest
class Test(unittest.TestCase):
def test_path_through_grid(self):
grid = [[0,1],
[0,0]]
self.assertEqual(path_through_grid(grid), ["start", "down", "right", "end"])
if __name__ == "__main__":
unittest.main()
答案 0 :(得分:1)
问题是这一行:
path = path[:-1]
在这里您分配给path
,这是一个错误。您只应更改path
,而不要对其进行分配。分配后,呼叫者的path
将不再受到影响-您现在创建了一个不同的列表引用。
因此,请使用一种减小路径大小的方法
path.pop()