使用递归函数检查矩阵的值并在列中跳转

  • 本文关键字:递归函数 python recursion matrix
  • 更新时间 :
  • 英文 :


假设我有一个只有0和1的矩阵,像这样:

0 0 1 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 1 0

我从第一列开始,移动到下一列只有三个选项,它们是[i+1][j+1] or [i][j+1] or [i-1][j+1]。不允许撞入1。它需要检查这三个方向,然后决定向哪里移动。

最好我想去低,所以[i-1][j+1]是第一个考虑的选择。如果不是,则是[i][j+1],如果不是,则是[i+1][j+1]。如果没有办法在不冲突1的情况下继续前进,则没有解决方案,则该函数返回0。目标是到达矩阵的最后一列,在尽可能低的行中,并返回行号。

我正在写一个代码来告诉它这一点,但我不知道每个if条件填充什么。我如何让它沿着这些方向移动,直到矩阵的末端?

def jumpFromOnes(matrix,i,j):

if(mat[i][j] == 0):

if(matrix[i+1][j+1] !=1 ):
< fill here >

elif (matrix[i][j+1] !=1):
< fill here >

elif (i==0 or matrix[i-1][j+1]!=1):
< fill here >
# This is to tell it where to stop, if it got to the last column or the last row. Dont know if it's correct though.

if(j+1<len(matrix[0])):
jumpFromOnes(matrix,i,j+1)
elif(i+1<len(matrix)):    
jumpFromOnes(matrix,i+1,0)
else:
return

ij索引更改为i+1,i-1j+1,具体取决于您要"跳转"到哪个索引。

您应该在循环中执行此操作,以便它多次执行此操作。(如果这是你想要的)

如果它在函数中,则将其返回到外部作用域,以便索引不断更改。(即函数外的ij也应该更改)

编辑:递归函数

def jumpFromOnes(mat,i,j):
if i==len(matrix)-1: return "Reached end at bottom"
if j==len(matrix[0])-1: return "Reached end at right"
if not mat[i+1][j+1]: return jumpFromOnes(mat,i+1,j+1)
if not mat[i][j+1]: return jumpFromOnes(mat,i,j+1)
if not mat[i-1][j+1]: return jumpFromOnes(mat,i-1,j+1)
return "Impossible to continue"

这将首先检查它是否到达其中一个端点,然后如果矩阵在新位置i+1,i-1j+1等于0(如not 1 -> 0not 0 -> 1,在python中分别等于FalseTrue),我们在该新位置返回jumpFromOnes,如果没有新位置可用,我们返回impossible to continue。

最新更新