想要算法在 3*3 维的网格中找到最短路径
Want algorithm to find shortest path in grid which 3*3 dimension
我需要下图的帮助我想在 Python 中实现以下逻辑,我是 Python 中的新手。
[![我需要下图的帮助我想在 Python 中实现以下逻辑,我是 Python 中的新手。][1]][1]
感谢任何帮助。
我建议寻找所有可能的路径。来自 link 的示例然后计算每个可能的总和并寻找最小的
import numpy as np
import copy
def findPaths(mat, path,paths, i, j):
# base case
if not mat or not len(mat):
return
(M, N) = (len(mat), len(mat[0]))
# if the last cell is reached, print the route
if i == M - 1 and j == N - 1:
paths.append(copy.deepcopy(path + [[i,j]] ))
return
# include the current cell in the path
path.append( [i,j])
# move right
if 0 <= i < M and 0 <= j + 1 < N:
findPaths(mat, path,paths, i, j + 1)
# move down
if 0 <= i + 1 < M and 0 <= j < N:
findPaths(mat, path,paths, i + 1, j)
# backtrack: remove the current cell from the path
path.pop()
if __name__ == '__main__':
mat = [ [2,5,4],
[3,2,1],
[8,0,3] ]
path = []
paths = []
x = y = 0
#find all possible paths
findPaths(mat, path,paths, x, y)
print(paths)
#get the sum of all paths
All_sums = []
for path in paths:
one_sum = 0
for p in path:
one_sum += mat[p[0]][p[1]]
All_sums.append(one_sum)
print(All_sums)
#get lower path
min_path = np.argmin(All_sums)
print(min_path)
#print the path
print(paths[min_path])
#print the val sequence
print([mat[p[0]][p[1]] for p in paths[min_path]])
我们可以使用递归轻松解决这个问题。这个想法是从矩阵的 top-left 单元格开始,并为下一个节点(紧邻右侧或紧邻底部单元格)重复出现,并继续为每个访问过的单元格执行此操作,直到到达目的地。还维护一个路径数组以存储当前路径中的节点,并在访问任何单元格时更新路径数组(包括当前节点)。现在,每当到达目的地(bottom-right 角)时,打印路径数组。
我需要下图的帮助我想在 Python 中实现以下逻辑,我是 Python 中的新手。
[![我需要下图的帮助我想在 Python 中实现以下逻辑,我是 Python 中的新手。][1]][1]
感谢任何帮助。
我建议寻找所有可能的路径。来自 link 的示例然后计算每个可能的总和并寻找最小的
import numpy as np
import copy
def findPaths(mat, path,paths, i, j):
# base case
if not mat or not len(mat):
return
(M, N) = (len(mat), len(mat[0]))
# if the last cell is reached, print the route
if i == M - 1 and j == N - 1:
paths.append(copy.deepcopy(path + [[i,j]] ))
return
# include the current cell in the path
path.append( [i,j])
# move right
if 0 <= i < M and 0 <= j + 1 < N:
findPaths(mat, path,paths, i, j + 1)
# move down
if 0 <= i + 1 < M and 0 <= j < N:
findPaths(mat, path,paths, i + 1, j)
# backtrack: remove the current cell from the path
path.pop()
if __name__ == '__main__':
mat = [ [2,5,4],
[3,2,1],
[8,0,3] ]
path = []
paths = []
x = y = 0
#find all possible paths
findPaths(mat, path,paths, x, y)
print(paths)
#get the sum of all paths
All_sums = []
for path in paths:
one_sum = 0
for p in path:
one_sum += mat[p[0]][p[1]]
All_sums.append(one_sum)
print(All_sums)
#get lower path
min_path = np.argmin(All_sums)
print(min_path)
#print the path
print(paths[min_path])
#print the val sequence
print([mat[p[0]][p[1]] for p in paths[min_path]])
我们可以使用递归轻松解决这个问题。这个想法是从矩阵的 top-left 单元格开始,并为下一个节点(紧邻右侧或紧邻底部单元格)重复出现,并继续为每个访问过的单元格执行此操作,直到到达目的地。还维护一个路径数组以存储当前路径中的节点,并在访问任何单元格时更新路径数组(包括当前节点)。现在,每当到达目的地(bottom-right 角)时,打印路径数组。