我编写了一个程序来递归地找到N * N网格中的最短路径。
def dfs(x,y,Map,p):
N = len(Map)
p += [[x,y]]
if Map[x][y] == 'E':
return p
for i in [[x-1,y],[x+1,y],[x,y-1],[x,y+1]]:
if N > i[0] >= 0 and N > i[1] >= 0 :
if (Map[i[0]][i[1]] == 'P' or Map[i[0]][i[1]] == 'E') and i not in p:
dfs(i[0], i[1], Map,p)
return []
当Map [x] [y] ='E'时,递归不会停止并返回p。但它一直持续到最后。如何纠正它并返回路径(p)。
答案 0 :(得分:0)
从外观上看,代码很容易无限循环。这是因为您没有检查您是否已经从给定节点进入节点并从所有(4)方向移动。
要简单地解决它,请添加另一个回答问题的布尔值NxN:visited?
。然后将代码更新为以下内容:
def dfs(x,y,Map,visited,p):
visited[x,y] = true;
N = len(Map)
(...)
if (Map[i[0]][i[1]] == 'P' or Map[i[0]][i[1]] == 'E')
and i not in p
and visited[i[0], i[1]] == false:
dfs(i[0], i[1], Map,visited,p)