【发布时间】:2020-12-08 01:11:49
【问题描述】:
给定一个像board 这样的矩阵,我想找到可以让我找到更多数字1's 的路径,因为我知道我只能上(n+1) 和右(m+1)。我正在尝试使用回溯解决方案,并且我设法知道我可以在最佳路径上找到多少 1's,但我无法弄清楚如何打印最佳路径的坐标。
board=[[0,0,0,0,1,0],
[0,1,0,1,0,0],
[0,0,0,1,0,1],
[0,0,1,0,0,1],
[1,0,0,0,1,0]]
def findPath(board,n,m):
noo=0
if board[n][m]>0:
noo+=1
if n==len(board)-1 and m==len(board[0])-1:
return noo
if n==len(board)-1:
noo+=findPath(board,n,m+1)
elif m==len(board[0])-1:
noo+=findPath(board,n+1,m)
else:
noo+=max(findPath(board,n,m+1),findPath(board,n+1,m))
return noo
print(findPath(board,0,0))
我应该如何或在哪里实现print(n,m) 以打印最佳路径的每个网格的坐标
已编辑
想出了这个解决方案
def path(board,x,y,xl,yl,sol,index,paths):
sol.append([x,y])
solaux=sol
if x==0 and y==0:
pass
if board[x][y]>0:
sol[0]+=1
if x==xl-1 and y==yl-1:
paths.append(sol)
print(sol)
return paths
if x==xl-1:
path(board,x,y+1,len(board),len(board[0]),sol,index,paths)
elif y==yl-1:
path(board,x+1,y,len(board),len(board[0]),sol,index,paths)
else:
index= len(sol)
auxnoo= sol[0]
path(board,x,y+1,len(board),len(board[0]),sol,index,paths)
sol = sol[0:index]
sol[0]=auxnoo
path(board,x+1,y,len(board),len(board[0]),sol,index,paths)
return paths
【问题讨论】:
-
对明显的拼写和语法/标点错误的编辑旨在使您的问题更易于阅读和更容易通过搜索找到。请不要撤消那些积极尝试以建设性方式编辑您的问题来帮助您和他人的成员的工作
-
我的坏可能点击了错误的按钮
标签: python algorithm backtracking