HW. Maze

Here Insert Picture Description

while True:
    #与一般的dp问题不同的是,我们需要另外一个矩阵记录到当前位置的上一个位置
    #如果一个点是不可达的,那么我们不需要关心它的上一个点,因为题目保证有解且唯一
    try:
        n, _ = list(map(int, input().split()))
        array = []
        for _ in range(n):
            array.append(list(map(int, input().split())))

        dp = [[float("inf")]*len(array[0]) for _ in range(len(array))]
        pre_point = [[[-1,-1] for i in range(len(array[0]))] for j in range(len(array))]
        for i in range(len(dp)):
            for j in range(len(dp[0])):
                if i == 0 or j == 0:
                    if i == 0 and j == 0:
                        dp[i][j] = 1
                        pre_point[i][j] =[0,0]
                    else:
                        if i == 0:
                            if array[i][j] == 0:
                                dp[i][j] = dp[i][j - 1] + 1
                                pre_point[i][j] = [i,j-1]
                        else:
                            if array[i][j] == 0:
                                dp[i][j] = dp[i-1][j] + 1
                                pre_point[i][j] = [i-1, j]
                else:
                    if array[i][j] == 0:
                        if dp[i-1][j] < dp[i][j-1]:
                            dp[i][j] = dp[i-1][j]
                            pre_point[i][j] = [i-1,j]
                        else:
                            dp[i][j] = dp[i][j-1]
                            pre_point[i][j] = [i,j-1]

        x,y = len(array)-1, len(array[0]) -1
        path =[(x,y)]
        while(x!=0 or y!=0):
            x,y = pre_point[x][y]
            path.append((x,y))
        for line in path[::-1]:
            print("(%d,%d)"%(line[0],line[1]))
    except:
        break

Guess you like

Origin blog.csdn.net/dpengwang/article/details/93066662