算法,DFS

时间:2016-04-25 10:15:57

标签: algorithm depth-first-search

我编写了一个程序来递归地找到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)。

1 个答案:

答案 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)