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
HW.迷宫问题
猜你喜欢
转载自blog.csdn.net/dpengwang/article/details/93066662
今日推荐
周排行