Python 有关DFS求解迷宫问题

img


有个地方不懂:就是如果newpoint合法,那么标记当前的点为1,继续深搜newpoint.也就是point[x][y]=1
dfs(newx,newy)这里可以理解,因为防止走回头路。那么为什么对newpoint深搜完了以后,要把原来的point设置为0呢(可访问),如果不加会导致什么?这里搞不灵清,请求指教!

嗨小郑,谢邀!我还没刷到迷宫类问题,我就从DFS角度讲一下:它是回溯算法中的一个特点:状态重置。dfs就是从一个点开始不断回溯寻找下一个位置,当找到目标位置或者不满足条件时就要回退到上一个位置往其他位置寻找,当这个位置也不满足条件时需要继续回退,以此类推。如果不将point改成0的话当找到当走完一个位置是point数组全都标记成1了,无法继续寻找。等我给你弄个gif

img

请问一下,我的代码错在哪里了


N ,M ,T =map(int,input().split())
dianzhen =[]
for i in range(1,N+1):
    for j in range(1,M+1):
        dianzhen.append((i,j))
x0, y0, x1 ,y1 = map(int,input().split())
obstacle = []
for i in range(T):
    x, y =map(int,input().split())
    obstacle.append((x,y))
n = 0
Flag = True
def shensou(a, b):
    if a == x1 and b == y1:
        global n,Flag
        n += 1
        Flag = False
        print(n)
    if Flag:
        if (a,b) in dianzhen not in obstacle:
            for x,y in (0,1),(1,0),(0,-1),(-1,0):
                a +=x
                b +=y
                shensou(a,b)
                a -= x
                b -= y
shensou(x0,y0)
print(n)